Original von user-287
braucht man das auch wenn magic quotes an sind?
Magic quotes war eines der dümmsten Features in PHP, die es je gab und verschwindet Gott sei user-158k mit PHP6. Das einzig richtige, was man bei magic_quotes_gpc machen kann, ist, das ganze rückgängig zu machen (stripslashes()). magic_quotes macht intern das gleiche wie addslashes(). Und addslashes() ist für die meisten Datenbankqueries schlicht und einfach falsch. Man hat immer die zum DBMS gehörende Funktion zum Escapen zu verwenden (oder Prepared Statements, wie schon erwähnt), andernfalls lässt sich das ganze in bestimmten Fällen sehr leicht umgehen (z.B. bei Multibyte-Charsets usw.).
Original von user-115
Naja sichern kann man wohl nie genug. Hier mein Sicherung Code:
Das ist absoluter Unsinn. Einfach mal auf gut Glück alle erdenklichen Sicherungsmaßnahmen anwenden ist wirklich doof. Das haben schon viele Projekte versucht und sind kläglich damit gescheitert (ich hab da Webspell und phpkit im Hinterkopf...).
<?php
// Unset GETs
foreach ($_GET as $key => $value) {
unset($$key);
}
Das soll wohl register_globals ruckgängig machen? user-158n ist das schonmal unvollständig und kann unschöne Folgen haben. Man denke an Sachen wie $_GET['_GET'] usw.
Sinnvoll ist das aber in keinem Fall. Wenn man brav seine Variablen vor der user-129utzung initialisiert stellt register_globals kein Sicherheitsrisiko dar und muss auch nicht rückgängig gemacht werden.
foreach ($_POST as $key => $value) {
// wenn man die quote option nicht gesetzt hat
$_POST[$key] = addslashes($value);
}
Ebenfalls sinnlos (Erklärung siehe oben). Quasi magic_quotes, nur im Userspace.
# Security Check QUERY_STRING *********************************************************************
$security_query = $_SERVER['QUERY_STRING'];
$security_bad_words = array(
'chr(', 'wget', 'cmd=', 'rush=',
'union', 'UNION', 'echr(', 'esystem(',
'cp%20', 'mdir%20', 'mcd%20', 'mrd%20',
'rm%20', 'mv%20', 'rmdir%20', 'chmod(',
'chmod%20', 'chown%20', 'chgrp%20', 'locate%20',
'grep%20', 'diff%20', 'kill%20', 'kill(',
'killall', 'passwd%20', 'telnet%20', 'vi(',
'vi%20', 'INSERT%20INTO','SELECT%20', 'alert(document',
'DELETE%20', 'UPDATE%20', 'JOIN%20'
);
$security_result = str_replace($security_bad_words, '*', $security_query);
if ($security_result != $security_query) {
die( "Hacking attempt" );
}
#**************************************************************************************************
Das lässt sich sowas von leicht umgehen (Groß-/Klein-Schreibung, urlencoded, alternative Kommandos [wget -> curl, grep -> perl] usw).... schreibt sicheren Code und macht nicht so einen Unsinn.