Desinfizieren Benutzereingabe für Datenbank in PHP bestimmt
-
12-09-2019 - |
Frage
Ich habe diesen Code:
$query = "select id from votes where username = '$user' and article_id = $this->id";
Ich habe versucht, diesen Code, es zu sanieren:
$query = sprintf("select id from votes where username = '$user' and article_id = $this->id",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
aber ich habe diesen Fehler für die mysql_real_escape Zeilen:
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'mexautos'@'localhost' (using password: NO) in /home/mexautos/public_html/kiubbo/data/article.php on line 145 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/mexautos/public_html/kiubbo/data/article.php on line 145 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'mexautos'@'localhost' (using password: NO) in /home/mexautos/public_html/kiubbo/data/article.php on line 146 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/mexautos/public_html/kiubbo/data/article.php on line 146
ich hier die Benutzername, ich weiß nicht, ob sein sicher genug:
function getUsername(){ return $this->username; }
Thx
Lösung
würde ich vorschlagen, vorbereitete Anweisungen für diese statt sprintf
Andere Tipps
Sie müssen eine MySQL-Verbindung, bevor Sie mysql_real_escape_string verwenden können.
Nicht sicher, ob dies ist, was ist dein Problem verursacht, aber ich glaube, dass die Variablen in der sprintf Anweisung nicht ‚$ user‘ und ‚this-> id $‘ sein sollten, aber sie sollten ‚% s‘ sein
Achtung: mysql_real_escape_string () [Function.mysql-real-escape-string]: Zugang für Benutzer verweigert 'Mexautos' @ 'localhost' (mit Kennwort: NEIN)
Achtung: mysql_real_escape_string () [Function.mysql-real-escape-string]: A Verbindung zum Server konnte nicht sein etabliert
Haben Sie die Verbindung? Ist es aktiv? Sie müssen vor dem mysql_real_escape_string () zu verwenden, verbunden werden Sie nicht vergessen, das Passwort zu setzen?
Versuchen:
mysql -u mexautos -p
(Typ eingeben, wenn kein Passwort)
Überprüfen Sie auch, Ihre sprintf () Funktion, müssen Sie die% s verwenden zu binden Ihre Variable
$a = 'Foo';
$b = 'Bar';
$foo = sprintf('Foo Bar %s %s', $a, $b);
Sie müssen eine Verbindung mysql_real_escape_string () zu verwenden, da es die Server-Codierungstyp verwendet santitize zu helfen.
Auch die sprintf () sollte in etwa so aussehen
$query = sprintf("SELECT id FROM votes WHERE username = '%s' and article_id = %d",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
Ich würde empfehlen, eine reife DB-Abstraktionsschicht verwendet wie Zend_Db (es gibt Tonnen von ihnen gibt). Ihre eigene Homebrew-Lösung Die Implementierung ist nicht etwas, was ich für ein Produktionssystem empfehlen würde.
Wie die anderen gesagt, nicht '$ user', sondern '% s', und Sie müssen eine offene Verbindung.
@Tomalak sprintf ist schneller - das ist der Grund, warum es zu benutzen -. es ist eine native C-Funktion