coding

Dienstag, 16. September 2008

hiding your code

wenn es um webanwendungen oder auch nur um einzelne html-seiten geht, gibt es oft neugierige leute (mich eingeschlossen), die wissen wollen wie der quelltext dazu aussieht. das ist weiters nicht schlimm, genügt es doch nur eines rechtsklicks und "seitenquelltext anzeigen" (benennung browserabhängig). wirklich verstecken kann man den code nicht, doch komprimieren und sehr schwer leserlich machen schon ;)

ich habe das spiel all lights out mit javascript nachgebildet und mich ein bisschen mit dem quellcode gespielt. das spiel funktioniert und müsste auf jedem javascript-fähigen browser* laufen. wer will, kann sich natürlich den quellcode dazu ansehen (ist in der datei einzeilig).

für alle, die es nicht erwarten können, gibt es hier einen screenshot davon.

zum spielen auf folgenden link klicken, zum downloaden "ziel speichern unter" (oder so etwas ähnliches): all_lights_out_javascript_edition (html, 5 KB)

viel spaß damit ;)

mfg mailo

* getestet auf: firefox 2 & 3, safari 3.12, google chrome, ie7 und opera 9.5 - davon nicht lauffähig auf ie7 und opera 9.5 (vermutlich css-probleme - werden gefixed wenn ich zeit und lust habe ;)

ps: falls jemand weiß, wie der css-block verschleiert werden kann oder auch weitere verschleierungstechniken kennt - ich bin ganz ohr ;)

pps: mit tiny-url kann man sehr lange links verkürzen und somit verschleiern (und eventuell für xss oder ähnliches nutzen ;)

Dienstag, 9. September 2008

php, javascript und boolean

im berufspraktikum habe ich das framework der firma um 2 template engine plugins erweitert, die ich übermorgen im dev-meeting präsentieren werde. die verwendeten scriptsprachen sind php und javascript (genauer: die ajax-libraries prototype und scriptaculous) und die template engine dazu ist smarty. die umsetzung ist natürlich nicht ganz reibungslos abgelaufen - wo wäre da denn der lerneffekt? ;)

zuerst dachte ich mir, mein laptop ist einfach nur stur, doch ich weiß ja, dass das problem meist davor sitzt ;)

als php-programmierer bin ich gewohnt boolsche variablen statt durch
if($bool==true) {
// some code
} else {
// another code
}
mit der kürzeren schreibweise
if($bool) {
// some code
} else {
// another code
}
zu überprüfen.

naja, wenn ich ehrlich bin, tendiere ich eigentlich mehr zu
($bool?/* some code */:/* another code */);

in javascript ist das nicht anders - außer eben, dass die $-zeichen bei den variablen fehlen. soviel zur syntax. bei den rückgabewerten gibt es jedoch einen unterschied.

php-code
$a = true;
$b = false;

// in php wird true als 1 ausgegeben und false gar nicht
echo $a; // 1
echo $b; //

javascript-code
var a = true;
var b = false;

// in javascript hingegen wird entsprechend true oder false ausgegeben
document.write(a); // true
document.write(b); // false

ein boolscher wert kann in javascript auch mittels new Boolean() gesetzt werden [beispiele].

hierbei ist aber zu beachten, dass die variable dann kein boolean sondern ein object ist.

javascript-code
var c = new Boolean(true);
var d = new Boolean(false);

document.write(typeof a); // boolean
document.write(typeof b); // boolean
document.write(typeof c); // object
document.write(typeof d); // object

wenn jetzt die variable mit new Boolean() gesetzt wurde, liefert die gekürzte schreibweise ein anderes ergebnis als bei der direkten initialisierung mit true oder false. bei boolean wird auf true oder false geprüft - bei object, ob es null bzw leer ist oder nicht.

javascript-code
(a?document.write('true'):document.write('!true')); // true
(b?document.write('true'):document.write('!true')); // !true
(c?document.write('true'):document.write('!true')); // true
(d?document.write('true'):document.write('!true')); // true

(a==true?document.write('true'):document.write('!true')); // true
(b==true?document.write('true'):document.write('!true')); // !true
(c==true?document.write('true'):document.write('!true')); // true
(d==true?document.write('true'):document.write('!true')); // !true

durch die template engine ist es mir nicht gelungen einen boolschen wert zu übergeben. dadurch versuchte ich die variable mittels new Boolean("false") zu befüllen. deshalb kam auch true heraus, wo ich eigentlich ein false erwartet habe (siehe variable d). sogesehen war es ja richtig, da die variable einen wert hatte und nicht null oder leer war.

es sind eben solche kleinen feinheiten, die den unterschied zwischen den verschiedenen scriptsprachen machen und auch den aufenthalt vor dem computer verlängern ;)

mfg mailo

Samstag, 6. September 2008

neues design

vor über 500 tagen habe ich aus reiner langeweile diesen blog begonnen. es ist also höchste zeit endlich mal das design zu wechseln (das alte finde ich eh schon recht langweilig).

gesagt - getan!

ich habe mich jetzt den nachmittag hingesetzt und das neue design umgesetzt (entworfen hatte ich es ja schon). wenn es jemand nicht gefällt oder er/sie irgendetwas auszusetzen hat, dann soll er/sie doch eine mail schreiben! ;)

wem es gefällt oder wem es egal ist, darf ein kommentar hinterlassen ;)

mfg mailo

Mittwoch, 14. Mai 2008

"versteckten" fehler gefunden

ich bin immer wieder froh und glücklich, wenn ich einen "wie-soll-man-bitte-auf-das-kommen-außer-per-zufall"-fehler gefunden und beseitigt habe - wie auch in diesem fall:

im anwendungsprojekt inkludiere ich gerade den phpmailer in ein drupal-cms, um mails verschicken zu können ohne einen smtp-server zu installieren. nun habe ich es schon so weit geschafft, dass die mail rausgeht, nur kam ich dann auf eine leere seite anstatt redirected zu werden. im log wurde folgende meldung eingetragen:

Cannot modify header information - headers already sent by (output started at [pfad]\includes\phpmailer.inc:28) in [pfad]\includes\common.inc in Zeile 314.

da ich einen editor verwendet habe, der keine zeilennummern anzeigt, fiel es mir nicht auf, dass diese datei aus nur 27 zeilen code bestand. als ich die zeilen zählte und auf 28 kam, war mir alles klar.

die funktion header() wird zum senden von http-headerinfos im rohformat benutzt. da diese infos im header sind, müssen sie vor jeglichen output stehen - nicht einmal ein leerzeichen, eine leerzeile, ein zeilenumbruch noch sonstiges in dieser art darf vor dem aufruf sein. der fehler trat auf, da die phpmailer.inc mittels include() eingelesen wurde und sich ganz zum schluss ein zeilenumbruch nach dem ?> eingeschummelt hatte.

zeilennummern sei dank ;)

mfg mailo

ps: hilfreiche quellen: quelle 1, quelle 2 und quelle 3

anmerkung: lasst euch nicht von den linknamen verwirren ;)

Samstag, 3. Mai 2008

secure (web)applications?

in der heutigen zeit sprießen programme und webapplikationen wie pilze aus dem boden. sobald die applikation irgendwie funktioniert, wird sie releast - im zeitalter von web 2.0 gibt es die tollen logos mit einem kleinen "beta" dran.

nun ja - es wird uns auch meist so vorgelebt (zb verwendet microsoft seine user ja auch als beta-tester). die heutige zeit ist in diesem bereich so schnell-lebig, dass viele meinen, dass man es sich nicht mehr leisten kann die applikation zb ausreichend zu testen - oder von der anderen sichtweise: wenn die applikation wirklich fertig wäre, dann ist sie schon wieder veraltet.

ich weiß nicht, ob es allgemein so ist, aber in meinem fall trifft es zu: ich habe nie gelernt SICHER zu programmieren! ich habe zwar gelernt zu programmieren, aber der security-aspekt war meiner meinung nach nicht wirklich vorhanden. mein ganzes (noch kleines) security know-how habe ich mir selbst erlernen müssen.

warum schreibe ich nun diesen blogeintrag?
ich bin sehr froh, dass ich nun endlich mein fh-projekt (j2ee, jsp) zum laufen gebracht habe. es ist ein simples programm. man ruft es im browser auf und gibt in das eingabefeld die matrikelnummer ein (und drückt enter oder klickt auf den button). danach wird in der datenbank gesucht und, wenn ein eintrag gefunden wird, dieser angezeigt (also matrikelnummer, name und nickname). falls kein entsprechender eintrag gefunden wird, sieht man die meldung "no student found for [matrikelnummer]".

studinfo-matrikelnummer

mein erster gedanke war gleich: "was wäre, wenn ich jemanden suche, der mit mir zu mc donalds geht?" natürlich habe ich sofort statt einer matrikelnummer going to mc donalds eingegeben - leider wurde keiner gefunden ;)

studinfo-mcdonalds

der nächste gedanke war: "OJE! XSS ALARM!" und die eingabe von <script>alert(/XSS/);</script> bestätigte dies!

studinfo-xss

hmm ... da im hintergrund eine datenbank ist und derzeit noch die eingabe direkt in die sql-query kommt, könnte auch eine sql injection erfolgreich sein - sie war es ;)

studinfo-sqlinjection

und die moral von dieser geschichte?
alle benutzereingaben sind BÖSE (bzw sollten als solches angesehen werden)!
ich habe 6 zeilen an code hinzugefügt, um die benutzereingabe zu überprüfen und somit die xss-attacke und sql-injection zu verhindern bzw erfolgreich abzufangen.

wer nun diesen minimalen aufwand bezüglich security weglassen will, der soll es von mir aus auch tun - it's your choice!
security muss nicht unbedingt komplex sein - keep it simple!

mfg mailo

Mittwoch, 12. März 2008

das nervt!

bei der informationsbeschaffung im internet nerven neben ins-nichts-führende google-links nur mehr vielversprechende ins-leere-führende links (für "kreativere" namen habe ich leider keine zeit gehabt ;)

lustig finde ich, wenn dann im quellcode folgendes zu finden ist:

quellcode


wahrscheinlich damit man weiter unten nicht den

<frame src="&#104;&#116;&#116;&#112;&#58;&#47;&#47;___&#99;&#108;
&#105;&#99;&#107;&#98;&#97;&#110;&#107;&#46;&#110;&#101;&#116;&#47;">

findet, der folgendes ergibt: http://___clickbank.net/ (link zensiert)

somit hab ich wieder mal meinen ascii-converter zum einsatz gebracht ;)

mfg mailo

Montag, 17. Dezember 2007

klein, aber oho!

ich bin total verwundert, wie ein so kleiner informationsgehalt einen so großen eindruck hinterlassen kann.

heute in der übung beim programmieren (java) - strings (= zeichenketten) vergleichen.

durch meine gewohnheit handle ich das so ab (syntax aufs wesentliche beschränkt):

stringvariable.equals("vergleichsstring")


wenn nun die stringvariable nicht initialisiert wurde und somit null ist, wirft sie eine nullpointer-exception.

dies kann man wie folgt verhindern: man dreht es um!

"vergleichsstring".equals(stringvariable)


nun ist es egal welchen wert die stringvariable hat - entweder ist sie dem string gleich oder nicht!

mfg mailo

Freitag, 7. Dezember 2007

tweening-erweiterung für flash

ja, mich gibt's auch noch ;)
hier wiedermal etwas flashiges - bewegungsanimationen mit/für flash.

in flash kann sowohl in der entwicklungsumgebung als auch rein code-technisch ein objekt (meist movieclip) bewegt werden.

beispiel:

import mx.transitions.*;
import mx.transitions.easing.*;

...

TransitionManager.start(myMC, {type:Fade, direction:Transition.OUT, duration:2, easing:None.easeNone});


da gibt es einige arten der animation, wie zb fade, fly, iris, photo, rotate, zoom, ...

weil dynamische animationen und bewegungen leichter code-basierend handzuhaben sind, wurde MC Tween und das nachfolgeprojekt Tweener entwickelt.

hier die links dazu:

MC Tween
Tweener
Tweener Dokumentation


ich kann es nur empfehlen!

mfg mailo

Mittwoch, 28. November 2007

css einmal anders

bislang dachte ich mir, dass css dazu da ist, um webseiten zu gestalten. es wird somit der inhalt vom layout getrennt.

aber es gibt leute, die auch andere sachen damit machen:

addieren
multiplizieren
spielen

sehr interessant!

mfg mailo

Mittwoch, 14. November 2007

internet explorer nervt

egal in welcher version - der internet explodierer nervt!

ich bastle schon seit ca 5 jahren webpages und probiere diese natürlich auf verschiedenen browsern bezüglich kompabilität aus (jetzt nur mehr firefox, opera und ie).

bislang kann ich nur sagen, dass mir (und wahrscheinlich auch vielen anderen) der ie immer ein dorn im auge ist, war und sein wird.

im firefox und im opera funktioniert es - test im ie und der heitere gemütszustand verschlechtert sich auf einem schlag. ob nun eine andersartige interpretation vom layout oder sonst irgend etwas - dem ie fällt immer eine gemeinheit ein.

nun ja - ich möchte gerne die breite und höhe des browserfensters ermitteln.

eine einfache lösung: verwendung von javascript!

javascript:alert(window.width);
javascript:alert(window.height);
javascript:alert(window.innerWidth);
javascript:alert(window.innerHeight);


firefox returniert jeweils die entsprechende pixelzahl.
opera returniert jeweils die entsprechende pixelzahl.
ie returniert jeweils ein "undefined". *grml*

na gut - dann muss ich mir eben etwas anderes einfallen lassen - DANKE ie!

mfg mailo

user status

Du bist nicht angemeldet.

archiv

Juni 2026
Mo
Di
Mi
Do
Fr
Sa
So
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
 
 
 
 
 
 
 

hinweis

die in diesem blog enthaltenen beiträge dienen ausschließlich dem informationszweck!

der autor übernimmt KEINE HAFTUNG für jeglichen missbrauch dieser informationen!

latest comments

Kumpulan Cerita Seks...
Kumpulan Cerita Seks Dewasa Terbaru 2017 Cerita Sex...
Cerita Sex (Gast) - 27. Feb, 02:58
St Patricks' Day Symbols...
The parade has more than 150,000 participants and attracts...
st patricks day t shirt (Gast) - 23. Feb, 14:08
John
Exclusively at Target 42 Bluray Combo Pack with exclusive...
Smithk112 (Gast) - 25. Mai, 20:10