Archiv der Kategorie: webdev

Reingefallen: Wie man sich auf Facebook „Likes“ erschleicht

Ich dachte eigentlich, immun gegen so billige Spielchen zu sein. Aus dem „Ich weiß schon, wo ich hinklicke“-Grund hatte ich auch lange Zeit keinen Virenscanner drauf und fuhr eigentlich immer gut. Gestern hat michs jedoch erwischt – auf Facebook. Also jetzt nicht so richtig erwischt, aber ich habe ein Video geliked, ohne es zu wollen. Erbost ging ich der Sache auf den Grund und war ziemlich schockiert über diese miese Praktik. Aber der Reihe nach.

Es handelt sich „http://ksmp3.de/Guten-Morgen-Schatz-geht-daneben/„. Bitte erstmal nix klicken. Facebook packt den Like-Button sinnvollerweise in ein IFrame, weil man so mit Javascript keinen Klick auslösen kann (Cross Domain Policy).… Den ganzen Post lesen

Veröffentlicht unter Javascript, misc IT, Persönlich | 83 Kommentare

Dealing with Trusted Timestamps in PHP (RFC 3161)

This article won’t be pariculary interesting for the most readers. My aim is to help the billions of developers that are confused about dealing with trusted timestamping. If you don’t know what Trusted Timestamps are, carry on.

Explanation of the concept behind Trusted Timestamps

I can’t put it better as Wikipedia (Trusted timestamping) does:

Trusted timestamping is the process of securely keeping track of the creation and modification time of a document. Security here means that no one — not even the owner of the document — should be able to change it once it has been recorded provided that the timestamper’s integrity is never compromised.

Den ganzen Post lesen
Veröffentlicht unter php, Security, webdev | 16 Kommentare

PHP WTF #5

…oder: Bei magischen Funktionen gut aufpassen.

class TestingEmpty
{
	public function __get($var)
	{
		if ($var == "test_empty")
			return "Hi there!";
	}
}

$t = new TestingEmpty();
echo $t->test_empty; //Hi there! 
var_dump(strlen($t->test_empty)); //int(9)
var_dump(empty($t->test_empty)); //bool(true)
$externalvar = $t->test_empty;
var_dump(empty($externalvar)); //bool(false)

Aha, also empty, aber mit String-Length von 9 Zeichen. Nach dem Zuweisen zu einer „wirklichen“ Variable dann auch nicht mehr empty.

Zur Abwechslung wollen wir aber nicht nur meckern, sondern noch konstruktiv zeigen, wie man diesen WTF (der vielleicht garkeiner ist?) behebt:

class TestingEmpty
{
	public function __get($var)
	{
		if ($var == "test_empty")
			return "Hi there!";
	}
	
	public function __isset($var)
	{
		echo "__isset triggered";
		
		if ($var == "test_empty")
			return true;
		
		return false;
	}
}

$t = new TestingEmpty();
echo $t->test_empty; //Hi there!
Den ganzen Post lesen
Veröffentlicht unter php, PHP-WTF, webdev | 9 Kommentare

Zip-Archive entpacken mit Javascript

Unzippen mit Javascript? Wer sollte sowas wollen? Egal! Es geht, reicht das als Begründung? Und das garnicht mal so schlecht. Wie üblich schmeiße ich gleich mit Code um mich:

<script src="ZipFile.complete.js"></script>
<script>
var zipFile = new ZipFile("zipfile.zip", readingDoneCallback);

function readingDoneCallback(zip)
{
	console.log("Zipfile reading finished! " + zip.entries.length + " files found in zip");
	
	for (var i = 0; i < zip.entries.length; i++)
	{
		zip.entries[i].extract(extractCallback);
	}
};

function extractCallback(entry, entryContent) 
{
	var filename = entry.name,
		csize = entry.compressedSize,
		ucsize = entry.uncompressedSize;
	
	console.log("File " + filename + " - comp.: " + csize + ", uncomp.: " + ucsize + "byte");
	console.log("File-Content: " + entryContent);
}
</script>

Simpler Aufbau, logische Implementierung.… Den ganzen Post lesen

Veröffentlicht unter Javascript, Quicktips, webdev | 7 Kommentare

Testen mal anders: phpt

phpt ist ein schmuckes, kleines Testframework, welches u.a. auch zur PHP Quality Assurance verwendet wird, um damit PHP-eigene Funktionen in PHP zu testen. Wir beginnen mit einem Beispiel:

--TEST--
My first cool test!
--FILE--
<?php 
class Foobar
{
	public function __construct()
	{
		for ($i = 0; $i < 6; $i++)
		{
			if ($i % 2 != 0)
				echo $i;
		}
	}
}

new Foobar();
?>
--EXPECT--
135

Und das Beste: Mit PEAR kommt der Spaß gleich mit:

Das ists aber lang noch nicht gewesen. Man führe sich folgenden Test zu Gemüte:

--TEST--
Second example: errortesting
--FILE--
<?php 
$foo = array(1, 3) * array(2, 6);
?>
Den ganzen Post lesen
Veröffentlicht unter php, Software Engineering, webdev | 3 Kommentare

Systemaufrufe, Linux, Windows, Rückgabewerte und der Errorstream

Heute folgendes Problem gehabt: Es soll ein Systemaufruf an openssl ts zur Signierung von Timestamps (siehe hier) erfolgen. Das an sich ist ja erst mal noch kein Problem. Allerdings soll die geschriebene Klasse gleichermaßen unter Linux und Windows mit möglichst aussagekräftigen Fehlermeldungen zum Einsatz kommen. Jetzt ist die pikante Sache daran, dass der ts-Parameter von openssl erst ab Version 0.99 mit dabei ist, die standardmäßig unter Debian Lenny nicht mit installiert ist. Jetzt erzeugt netterweise ein Aufruf von openssl ts einen Returnwert von 0 (= alles okay), obwohl openssl den ts-Befehl in der installierten Version garnicht kennt – wir haben also keine Möglichkeit über eine Prüfung des Returnwertes alleine über Erfolg oder Misserfolg der Funktion zu entscheiden:

Als Waffe der Wahl haben wir uns nun also für exec entschieden, da shell_exec keinen Returnwert zurückliefert und system / passthru den Programmoutput einfach rausfeueren und nicht returnen.… Den ganzen Post lesen

Veröffentlicht unter php, Quicktips, webdev, Linux | 1 Kommentar

Java Applet Tutorial: Applet erstellen, einbinden und mit Javascript ansprechen

Wenn ich an Java Applets denke, ist damit immer ein verstaubtes Web 1.0 – Bild assoziiert, gepaart mit animierten gifs und anderen Schandtaten. Heutzutage haben die Applets ihre Nische gefunden und werden vor allem da benutzt, wo Javascript noch zu langsam / umständlich ist, bspw. mathematische Zwecke. Wir widmen uns dem Thema mal ganz von vorne. Selbst wenn keine Javakenntnisse bestehen, soll man also noch gut folgen können. Soweit der Plan.

Was am Ende bei rumkommen wird

Wir werden ein Java-Applet bauen, das den Inhalt von Ordnern auf dem PC des Users in einer Liste anzeigt. Auch das Löschen von Dateien ist möglich.… Den ganzen Post lesen

Veröffentlicht unter Javascript, webdev, Java | 15 Kommentare

Änderungen einer Form überwachen

Aufgabenstellung: Ich möchte eine <form> mit allen ihren Elementen überwachen, ob der Benutzer eine Änderung vorgenommen hat. Wenn dem so ist und er die Seite verlässt / neu lädt, ohne die Form abgeschickt zu haben, soll ein Hinweis erscheinen, der ihn darauf aufmerksam macht und fragt, ob er die Seite wirklich verlassen möchte.

Das HTML-Gerüst

Mal alles hingezimmert, was wir so an Formularelementen kennen:

<!DOCTYPE html>
<html>
<head>
	<script src="http://code.jquery.com/jquery-1.5.js"></script>
	<script>
	//Code folgt dann hier
	</script>
</head>
<body>
	<form>
		<select name="select-single" id="select-single">
			<option>Single1</option>
			<option>Single2</option>
		</select>
		<select name="select-multiple" id="select-multiple" multiple="multiple">
			<option selected="selected">Multiple1</option>
			<option>Multiple2</option>
			<option selected="selected">Multiple3</option>
		</select>
		<input type="checkbox" name="check" value="check1" id="check1" />
		<input type="checkbox" name="check" value="check2" checked="checked" id="check2" />
		<input type="radio" name="radio" value="radio1" checked="checked" id="radio1" />
		<input type="radio" name="radio" value="radio2" id="radio2" />
		<input type="text" name="text" value="default text" id="text" />
		<textarea name="textarea" id="textarea">foobar</textarea>
	</form>
</body>
</html>

Da wären also ein Select, ein Select mit Mehrfachauswahl, ein Textfeld, eine Textarea, zwei Radiobuttons und zwei Checkboxen.… Den ganzen Post lesen

Veröffentlicht unter Javascript, webdev | 10 Kommentare

Best-of-the-Web 6

Hier die nächste Runde netter Sachen aus dem Netz. Diesmal weniger Artikel und mehr „Goodies“.

Den ganzen Post lesen
Veröffentlicht unter Best of the Web | 1 Kommentar

Javascript: selbstausführende, anonyme Funktionen

Ziel des Artikels: Den Sinn folgenden Konstrukts verstehen

(function(window, document, undefined) {
    //some fancy code
})(this, document);

Mag auf den ersten Blick für den nicht täglich mit Javascript schaffenden Menschen beängistend aussehen. Aber der Reihe nach. Eine ähnliche Konstruktion kommt übrigens in jQuery zum Tragen (siehe source).

Anonym?

Erstmal ist die Funktion anonym, also ohne Namen. Einfach aus dem Grund, weil sie keinen Namen braucht, da sie sich ja selbst aufruft. Man könnte ihr übrigens einen Namen geben, funktionieren würde es trotzdem. Vereinfacht sieht das dann z.B. so aus:

(function nichtMehrAnonym() {
    //some fancy code
})();

Vorteil: Wenn wir vorhaben, die Funktion aus sich selbst heraus nochmal aufzurufen, ist das so bequemer möglich (Rekursion).… Den ganzen Post lesen

Veröffentlicht unter Javascript, webdev | 6 Kommentare