Autor |
Nachricht |
phpler
Threadersteller
Dabei seit: 15.02.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Sa 30.06.2007 11:22
Titel [php] Effektive Verschlüsselung? |
|
|
Hi!
Ich habe hier einen Code um einen QueryString zu verschlüsseln bzw. wieder zu entschlüsseln und wollte mal die Erfahrenen Programmierer hier fragen, ob diese Art von Sicherung so gut ist bzw. was ich noch verbessern könnte.
Was mir zu bedenken gibt ist die for-Schleife...wenn es viele aktive User gibt und das Skript recht häufig aufgerufen wird, wie sieht es dann mit der Perfomance aus? Wäre für jeden Tipp dankbar!
Code: |
function encode($string)
{
$secString = md5("geheim");
$length = strlen($string);
$pos = rand(0,$length);
$string = base64_encode($string);
for($i=0;$i<=$length;$i++)
{
if( $i == $pos )
{
$secured .= $secString.$string[$i];
}
else
{
$secured .= $string[$i];
}
}
return $secured;
}
function decode($string)
{
$secString = md5("geheim");
if( strstr( $string, $del_sec ) )
{
$string = str_replace($secString,"",$string);
$string = base64_decode( $string );
$string = explode(";",$string);
foreach( $string as $s )
{
$pre = explode("&",$s );
foreach( $pre as $p )
{
$t = explode("=",$p);
$data[$t[0]] = $t[1];
}
}
return $data;
}
else
{
return FALSE;
}
} |
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Sa 30.06.2007 13:57
Titel
|
|
|
Also Performance-technisch gesehen, ist sowas kein Problem.
Auch deine Schleife stellt kein Problem dar.
Aber warum willst du den Query-String denn überhaupt verschlüsseln?
Eventuell solltest du die Sache ganz anders angehen.
Wenn du nicht willst, daß die übergebenen Parameter in der Browser-History auftauchen oder für andere sichtbar sind, dann solltest du die Daten nicht per GET, sondern per POST übergeben.
Wenn du diese Daten dann noch verschlüsselt haben willst, dann solltest du sie über eine sicherere Verbindung per SSL übertragen.
Und den Sinn deiner Funktionen kann ich nicht so recht erkennen...
Was soll denn das für eine Verschlüsselung sein?
Das ist ja nichts, was besonders sicher wäre...
Auch kann ich den Sinn des md5-Hashes da drin nicht wirklich erkennen...
Warum das?
Wenn du diesen Weg gehst, dann könntest du mit den mcrypt-Funktionen von PHP arbeiten.
Da sind wirklich gute Verschlüsselungsalgorithmen (z.B. Rijndael, also AES) implementiert. Damit könntest du sicher verschlüsseln; mit deinen Funktionen da nicht.
|
|
|
|
|
Anzeige
|
|
|
SPL1FFSTAR
Dabei seit: 04.06.2007
Ort: -
Alter: -
Geschlecht:
|
Verfasst Sa 30.06.2007 16:31
Titel
|
|
|
RSA ? :_D
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Sa 30.06.2007 18:22
Titel
|
|
|
RSA würde ich nicht empfehlen:
Zitat: | RSA ist im Vergleich zu 3DES, AES und SHA-1 um mindestens einen Faktor 1.000 langsamer. |
Quelle: RSA-Kryptosystem (Wikipedia)
Außerdem: RSA ist symmetrische Verschlüsselung, während z.B. AES asymmetrisch ist.
Ich würde AES einsetzen: Schnell, frei verfügbar, keine Lizenzgebühren, unter den sichersten Verfahren.
Die Mcrypt-Funktionen von PHP bieten die Möglichkeit, verschiedenen Verschlüsselungsalgorithmen zu arbeiten.
Blowfish wäre Default.
Von DES würde ich in jedem Fall abraten.
TripleDES macht's nicht viel besser (Drei mal Null bleibt auch Null).
Twofish, IDEA, CAST, SaferPlus, LOKI97, ... Da steht 'ne Menge zur Verfügung...
Rijndael ist AES. Das bevorzuge ich meist.
|
|
|
|
|
Zeithase
Dabei seit: 09.05.2005
Ort: Erfurt
Alter: 39
Geschlecht:
|
Verfasst Sa 30.06.2007 19:04
Titel
|
|
|
Ich sehe immernoch keinen Sinn darin, einen Querystring zu verschluesseln.
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst So 01.07.2007 00:33
Titel
|
|
|
Zitat: | Ich sehe immernoch keinen Sinn darin, einen Querystring zu verschluesseln. |
Ja, ich auch nicht. Darum habe ich ja gefragt, warum der unbedingt verschüsselt sein soll.
Wenn die übergebenen Daten nicht in der Browserhistory gespeichert werden sollen, dann würde ich sie per POST übergeben.
Und ansonsten wäre es in den meisten Fällen sicherlich sinnvoller, wenn man eine verschlüsselte Verbindung über SSL einsetzt.
|
|
|
|
|
phpler
Threadersteller
Dabei seit: 15.02.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst So 01.07.2007 06:28
Titel
|
|
|
Hi und danke erstmal für eure Antworten.
Also warum ich den Query-String verschlüsseln will ist folgender: Ich arbeite gerade an einem Browsergame und finde das man mit einem Query-Sting schon jede Menge blödsinn anstellen kann, bzw. möglicherweise zum Betrug verführt.
Jetzt habe ich mir überlegt das es eine einfach Base64-Kodierung nicht reicht...vielleicht probiert das ja einer aus, kann dann einen eigenen Query erstellen und einfach mit Base64-Kodieren. Deshalb habe ich einfach einen MD5-String eingebaut und zwar immer an einer anderen Position, damit man diesen nicht so leicht erkennt. Ohne diesen kann man auch nicht, bzw. denke ich das, den String entschlüsseln.
So wie ich das sehe ist mcrypt aber third-party-tool oder? Ich weiß nicht ob das jeder Hoster zur Verfügung stellt oder nachträglich für mich installiert.
Für weitere Lösungsvorschläge bin ich jederzeit zu haben. Danke
|
|
|
|
|
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
Verfasst So 01.07.2007 10:53
Titel
|
|
|
phpler hat geschrieben: | Also warum ich den Query-String verschlüsseln will ist folgender: Ich arbeite gerade an einem Browsergame und finde das man mit einem Query-Sting schon jede Menge blödsinn anstellen kann, bzw. möglicherweise zum Betrug verführt. |
Deswegen sollte deine Anwendung intern so programmiert sein, dass da nichts passieren kann.
Den Query-String zu verschlüsseln ist nur die Kaschierung schlechter und unsicherer Programmierung.
Nenn doch mal ein Beispiel, wo deine Nutzer etwas manipulieren könnten.
|
|
|
|
|
|
|
|
Ähnliche Themen |
SSL Verschlüsselung
Verschlüsselung/Kopierschutz für PHP
Plattform & Sprachenunabhängige Verschlüsselung
Die Hyper-Verschlüsselung einer ganzen Webpräsenz
|
|