Sichere Einträge in die MySql DB
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
abfragen
array
aufruf
code
einfachen angriffe
eingabe
eintrag
einzelne elemente
erkennung
funktion
input
letzten zwei
machen
post
profi
schauen
schutz
sinn
webseite
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das ganze lässt recht wenig input zu. Sollte zB. jemand wie hier code posten geht es nicht. Von daher musste mal schauen.
Andre
<?php array_walk_recursive( $_GET , 'secure_code' );//GET durchgehen array_walk_recursive( $_POST , 'secure_code' );//POST durchgehen array_walk_recursive( $_REQUEST , 'secure_code' );//REQUEST (GET + POST + COOKIES) durchgehen //VALIDATION OF INPUT function secure_code(&$v,$k) { if(is_array($v)){ secure_code($v); }else { if (preg_match("/\w*((\%27)|(\'))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix",$v)){ echo '<h1>Invalid input</h1>'; exit; } if (preg_match("/((\%3C)|<)((\%2F)|\/)*[a-z0-9\%]+((\%3E)|>)/ix",$v)){ echo '<h1>Invalid input</h1>'; exit; } if (preg_match("/((\%3C)|<)((\%69)|i|(\%49))((\%6D)|m|(\%4D))((\%67)|g|(\%47))[^\n]+((\%3E)|>)/i",$v)){ echo '<h1>Invalid input</h1>'; exit; } } $v = mysql_real_escape_string($v); $_POST[$k] = $v; } ?>
Beitrag zuletzt geändert: 29.11.2010 15:02:43 von andre-morillon -
@andre-morillon: Was macht dein Code und warum sollte er sicherer sein? Ich erkenne da:
* Eine is_array Abfrage, obwohl $v nie ein Array sein kann
* Escaping von allen Eingaben. Dies ist immer dann nicht gut, wenn du nicht ausnahmslos alle Werte in einem MySQL Query brauchst und auch sonst nirgends verwendest
* Erkennung von irgendwelchen seltsamen Zeichen (versteht ich nicht)
* Schreiben aller Einträge in $_POST. Sinn? Es gibt schon Gründe, warum man nicht alles in ein Array tut, sondern $_POST und $_GET trennt... -
jop hast recht, ich hab den code aus mehreren abfragen zusammen geschustert.
Also das ganze soll CSS code aufdeken (die letzten zwei) und der erste preg_match-Aufruf soll SQL-Injection ausfindigmachen.
Will man nur einzelne elemente prüfen muss man das ganze etwas umschreiben, sollte auch nicht so schwer sein.
mfg André -
@vbs-linux: Es kommt ganz drauf an, was du sicher haben willst.
Um SQL-Injection zu vermeiden, langt mysql_real_escape_string(). Wenn du den Text dann einfach so auf deiner Webseite ausgibts, kann er immer noch mit HTML/JavaScript/etc deine Webseite umgestalten. Dafür würde ich bei der Ausgabe noch ein htmlspecialchars() verwenden. Die beiden Funktionen sollte alle "einfachen" Angriffe aushelben. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage