Der ein oder andere hat vieleicht schon man von XSRF gehört haben.
Heute gehts mal darum, was XSRF genau ist, warum es auftriff und wie man dieses Sicherheitsproblem umgehen kann.
20
Sep
Der ein oder andere hat vieleicht schon man von XSRF gehört haben.
Heute gehts mal darum, was XSRF genau ist, warum es auftriff und wie man dieses Sicherheitsproblem umgehen kann.
2
Apr
In jedem etwas komplexeren Script kommen if-Abfragen vor, oftmals auch mit mehreren Bedingungen verknüpft, und zwar mit AND oder OR, bzw. deren Equivalent && oder ||. Aber sind diese wirklich komplett gleich? Macht es auch von der Geschwindigkeit keinen Unterschied? Ich habe es unter die Lupe genommen.Weil es bei meinem letzten Beitrag soviel Kritik gab, weil ich zu wenig Angaben zu dem Test gemacht habe, mach ich diese jetzt direkt am Anfang, damit ich es nicht wieder vergesse *g*
Jede Abfrage wird 10.000 mal ausgeführt. Bei einer erfolgreichen Bedingung wird in der Abfrage nichts ausgeführt.
Die Codes:
if($var == 'a' AND $var2 == 'b'){ } if($var == 'a' && $var2 == 'b'){ } if($var == 'a' OR $var2 == 'b'){ } if($var == 'a' || $var2 == 'b'){ }
Die Ergebnisse:
| Was? | Laufzeit in s | Verhältnis zum Schnellsten |
|---|---|---|
| && | 0.00482296943665 | 100% |
| AND | 0.00491499900818 | 101.9% |
| Was? | Laufzeit in s | Verhältnis zum Schnellsten |
|---|---|---|
| || | 0.00355005264282 | 100% |
| OR | 0.00364589691162 | 102.7% |
Wie man also sieht, sind && und || schneller als AND und OR, aber auch nur minimal.
Ich persönlich werde weiterhin AND und OR benutzen, weil ich es einfacher zu schreiben finde ![]()
30
Mrz
Um eine Variable in einen Integer zu verwandeln gibt es in PHP 2 Möglichkeiten.
$foo = (int)$foo;
$foo = intval($foo);
Also einmal das Typecasting, und einmal die Funktion.
Doch welche davon ist schneller? Ich habe es unter die Lupe genommen, mit jeweils 10.000 Durchläufen.
| Was? | Laufzeit in s | Verhältnis zum Schnellsten |
|---|---|---|
| intval($foo) | 0.0101521015167 | 100% |
| (int)$foo | 0.0101780891418 | 100.3% |
Wie man also sieht, ist der Unterschied minimal, und eigentlich kaum zu beachten. Ich werde deswegen auch weiterhin (int) verwenden, da ich es einfach gewohnt bin, eben schnell (int) zu tippen *g*
25
Mrz
Wie angekündigt, gibt es von mir nun den Benchmark zu den verschiedenen Methoden der Passwortgenerierung.
Die 4. Methode könnte man, wie gesagt, noch so erweitern, dass es auch für Passwörter mit mehr als 40 Zeichen länge funktioniert. Dies hab ich einmal gemacht, und dies hier ist der Code:
1 2 3 4 5 6 7 8 9 | function generatePW($length){ $times = ceil($length/40); $password = ''; for($i=0;$i<$times;$i++){ $password .= substr(sha1(time()*uniqid(mt_rand())), 0, $length); $length -= 40; } return $password; } |
Ich hab das ganze auch noch mit in den Benchmark einbezogen. Es handelt sich dabei um Methode 5.
Ich möchte diesmal nicht lange um den heißen Brei reden, und stelle euch einfach die Ergebnisse, nach 10.000 Generierungen mit einer Länge von 8 Zeichen vor.
| Was? | Laufzeit in s | Verhältnis zum Schnellsten |
|---|---|---|
| Methode 3 | 0.0743930339813 | 100% |
| Methode 4 | 0.180932998657 | 243.2% |
| Methode 2 | 0.184069871902 | 247.4% |
| Methode 5 | 0.214463949203 | 288.3% |
| Methode 1 | 0.517629861832 | 695.8% |
Das Ergebnis hat mich nicht sonderlich verwundert. Das Methode 3 schneller ist als 4, kann man sich sicherlich denken, da die 4. Methode einfach nur erweitert ist. Mich hat es nur etwas verwundert, dass Methode 2 schneller ist als Methode 5. Deswegen sollte jeder, der wirklich Zufallscodes/Passwörter mit mehr als 40 Zeichen länge braucht, auf Funktion 2 zurückgreifen. Alle anderen sollten Funktion 4 verwenden, da dort die besten Zufallswerte herauskommen, und das auch noch in einer akzeptablen Zeit. Einziger Nachteil ist halt, dass man nicht problemlos weitere Zeichen hinzufügen kann.
16
Mrz
Schreibt man ein Loginsystem, bei dem die Passwörter verschlüsselt gespeichert werden, ist es unmöglich ein vergessenes Passwort dem User zurückzuschicken. Also muss ein neues generiert werden. Dafür gibt es viele Möglichkeiten, und ich werde hier mal ein paar Auflisten, und bald einen Benchmark für diese Methoden nachliefern.
Mir sind spontan 2 Möglichkeiten eingefallen, die ich beide noch einmal in einer etwas anderen Ausführung aufgeschrieben habe, bzw. eine davon noch etwas präziser gestaltet habe, weil diese zu vorhersehbar ist.
weiterlesen "[PHP] Passwörter generieren"
15
Mrz
Es gibt 2 Möglichkeiten um eine Variable in PHP um 1 zu erhören, und zwar mit $i++ und ++$i. Aber wo liegt der Unterschied? Gibt es Geschwindigkeitsunterschiede?
Auf genau diese Fragen werde ich jetzt eine Antwort liefern.
Wenn es nur darum geht, eine Variable um 1 zu erhöhen, tun beide Funktionen genau das gleiche. Doch es gibt einen kleinen aber feinen Unterschied, und der liegt in der Ausgabe. Man nehme folgende Codes:
$i = 0; echo $i++;
$i = 0; echo ++$i;
Was meint ihr, was die Ausgabe ist?
Bei der 1. Variante lautet die Ausgabe 0, bei der 2. Variante 1. Es wird also bei $i++ zuerst der Wert zurückgegeben, und dann um 1 erhöht. Bei ++$i ist es genau anders herum, es wird zuerst der Wert um 1 erhöht, und dann zurückgegeben.
Doch wenn es nur um die Erhöhung des Variablenwertes geht, welche Methode ist die beste/schnellste? Hier ein Benchmarkergebnis:
| Was? | Laufzeit in s | Verhältnis zum Schnellsten |
|---|---|---|
| $i++ | 0.00641298294067 | 100% |
| ++$i | 0.0360429286957 | 562% |
Ich finde es ziemlich verwunderlich, dass es so riesige Unterschiede bei den beiden Methoden gibt , kann es mir aber momentan noch nicht erklären. Ich halte euch auf dem laufenden, wenn ich was neues erfahre
Was ich mir aber gerade auch noch für eine Frage stelle, ist, ob das gleiche auch für andere Programmiersprachen gilt. In Java bin ich erst ein Anfänger, und weiß noch nicht, wie ich die Geschwindigkeit messe. Das gleiche gilt für C und C++, welche ich jedoch nicht lerne, sondern nur ein paar Grundkenntnisse habe. Also über Hinweise bin ich, im Namen meiner Leser, sehr dankbar ![]()
5
Mrz
MuellerLukas hat mich auf die Idee für diesen Benchmark gebraucht, Danke nochmal
Oftmals liest man in Foren von Kommentaren, wo gesagt wird, dass das verwenden des Kommas schneller ist, wenn es darum geht 2 Strings zu verketten, und der User Punkte genutzt hat, also so:
echo $var1.$var2;
Die Variante mit Komma müsste also wie folgt sein:
echo $var1,$var2;
Ist die Variante mit Komma denn jetzt wirklich schneller? Oder doch die Punkte? Genau das werde ich jetzt testen.
Ich selber verwende Punkte, weil ich es dann einheitlich habe, und nicht an manchen Stellen Kommas, und dann bei Funktionen Punkte.
3
Mrz
Fehlermeldungen sollte ein Besucher nicht unbedingt sehen, doch manche wollen die Ausgabe nicht komplett abstellen. Man programmiert dann zwar entsprechend, so dass keine Fehlermeldungen ausgegeben werden, aber manchmal gibt es dann doch Situationen, wo Fehler auftreten können, z.B. wenn eine MySQL Verbindung fehlschlägt, weil die Daten falsch sind. In so einem Fall sollte man die Fehler unterdrücken, und dafür gibt es mehrere Möglichkeiten:
weiterlesen "[PHP] Fehlerunterdrückung"
25
Feb
Heute gibt es mal wieder einen Beitrag zur Optimierung von PHP Anwendungen von mir. Und zwar geht es darum, welche Schleife man am besten nutzt, wenn man eine bestimmte Anzahl an Durchläufen haben möchte. In meinem Fall soll nun von 1 bis 10.000 gezählt und diese Zahl ausgegeben werden.
Dafür gibt es 3 Möglichkeiten:
1 2 3 | for($i=1;$i<=100000;$i++){ echo $i; } |
1 2 3 4 5 | $i = 1; while($i<=100000){ echo $i; $i++; } |
1 2 3 4 5 | $i = 0; do{ $i++; echo $i; } while($i<=100000); |
weiterlesen "[PHP] Welche Schleife ist die beste für eine bestimmte Anzahl an Durchläufen?"
26
Jan
Möchte man eine Zahl mit einer Potenz von 2 (2n) multiplizieren, oder dividieren, besteht die Möglichkeit einen Bitshift anzuwenden. Diese Möglichkeit ist performanter als z.B. eine normale Division durch die Zahl. Hier ein einfaches Beispiel des Links-Shifts (<<), welcher der Multiplikation entspricht.
weiterlesen "Bitshifts"
WPthemesplugin.com
Lokalisiert von Hashi
Ein Theme von London Venues unterstützt von Texas Driver Education.
