Problem bei escapen

Kralle

New Member
Hi,

ich habe eine Datei bei der ich die $_POST Variablen dringend escapen muss, da man sonst SQL Injections durchführen kann um an den Adminlevel zu kommen.

Ich habe damit auch schon begonnen allerdings treten Fehler auf...

Code:
Fatal error: Can't use function return value in write context in /var/www/vhosts/XXXXX-XXXXX.com/httpdocs/options.php on line 41

Im Anhang befindet sich die Alte (nicht escapte) und die neue (teilescapte da bereits Fehler auftreten)

Ich bitte euch mir bei dem Problem zu helfen und Danke im voraus
 

Attachments

Last edited by a moderator:
Da sind aber einige Ungereimtheiten drin.

Wenn du einen Input nicht in einem SQL-Statement verwendest, musst du den auch nicht escapen, da ja kein SQL injected werden kann.
Code:
$state = 0;
if ($_POST['whatever'] == 'on') $state = 1;
$sql = sprintf('SELECT * FROM table WHERE state=%d', $state);

Wenn der Input in das SQL gegeben wird, dann muss man escapen. Aber am besten erst, wenn man es ins SQL einfügt. Sonst verlässt man sich drauf, dass vorher schon escaped wurde oder escaped doppelt und das ist genauso schlecht.
Code:
if ($name = @$_POST['name']) {
  $sql = sprintf(
    "SELECT * FROM users WHERE name='%s'",
    mysql_real_escape_string($name)
  );
}
 
Last edited by a moderator:
Hi,

ich gib mal ganz ehrlich zu: Ich kann kein Php (noch)

Daher bitte ich dich das Problem zu verdeutlichen indem du Zeilen aus meinen Dateien nimmst...

Ist nähmlich wichtig das die Datei sicher ist weil sich gestern jemand dadurch den Adminstatus geholt hat :(

Danke im Voraus
 
Mal ganz Böse:
Vielleicht solltest du dann deine PHP-Fähigkeiten nicht auf einem Produktivsystem und im öffentlichen Web ausprobieren!!!
 
Auf so einen Post habe ich nur gewartet ;)

Dazu werde ich mich nicht äußern, sondern nur um Hilfe bei meiem Problem bitten ;)

LG
 
Daher bitte ich dich das Problem zu verdeutlichen indem du Zeilen aus meinen Dateien nimmst...
Ich dürfte mit den beiden Beispielen recht gut das abgedeckt haben, was in deinem Script auftaucht.

Schau dir auch mal die Dokumentation zu sprintf() an.

Hier noch ein paar Hinweise:
PHP:
// Dieses Konstrukt:
if (isset($var) && $var == 'on') {
  $state = 1;
}
else {
  $state = 0;
}
do_something_with($state);

// Sieht so viel besser aus:
$state = (@$var == 'on') ? 1 : 0;
do_something_with($state);


// Und statt:
if (array_key_exists('varname', $_POST) && isset($_POST['varname'])) {
  do_something_with($_POST['varname']);
}

// würde ich das so schreiben:
if ($var = @$_POST['varname']) {
  do_something_with($var);
}

Das auf dein Script anzuwenden überlasse ich mal dir. Dabei lernst du viel mehr als wenn du es gemacht bekommst. Und die wesentlichen Informationen solltest du jetzt haben.
 
Last edited by a moderator:
Back
Top