Sind mysql_real_escape_string() und mysql_escape_string() für die App-Sicherheit ausreichend?
Während diese Funktionen einen gewissen Schutz vor SQL-Injection und anderen Angriffen bieten können , sie beheben bestimmte Schwachstellen nicht.
SQL-Injection
Mysql_real_escape_string() kann Ihre Anwendung immer noch einer SQL-Injection aussetzen, wenn Sie PHP-Variablen in Abfragen nicht ordnungsgemäß verarbeiten. Betrachten Sie das folgende Beispiel:
$sql = "SELECT number FROM PhoneNumbers WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);
Diese Abfrage kann von einem Angreifer manipuliert werden, um nicht autorisierte SQL-Anweisungen auszuführen, da mysql_real_escape_string() nicht dafür ausgelegt ist, Tabellennamen, Spaltennamen oder LIMIT-Felder zu sichern.
Like-Angriffe
Mysql_real_escape_string() reicht nicht aus, um LIKE-Exploits zu verhindern. Ein Angreifer könnte einen böswilligen Wert wie „%%“ eingeben, um alle Datensätze zurückzugeben, wodurch möglicherweise vertrauliche Informationen gefährdet werden.
Charset-Exploits
Bestimmte Browser sind möglicherweise für den Zeichensatz anfällig Exploits, die es Angreifern ermöglichen, bösartige Zeichen einzuschleusen, die Escape-Mechanismen umgehen und beliebige SQL-Befehle ausführen.
Vorbereitete Anweisungen: Eine umfassende Lösung
Um Ihre Anwendung effektiv zu sichern, ist es das Es wird empfohlen, vorbereitete Anweisungen anstelle von mysql_real_escape_string() zu verwenden. Vorbereitete Anweisungen führen SQL-Abfragen mit vom Benutzer bereitgestellten Werten aus, indem sie diese als Parameter binden. Dadurch ist kein manuelles Escape erforderlich und es wird sichergestellt, dass nur autorisiertes SQL ausgeführt wird.
Hier ist ein Beispiel für die Verwendung einer vorbereiteten Anweisung in PHP:
$pdo = new PDO($dsn); $column = 'url'; $value = 'http://www.example.com/'; $limit = 1; // Validate the search parameter column. $validColumns = array('url', 'last_fetched'); if (!in_array($column, $validColumns)) { $column = 'id'; } $statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' . 'WHERE ' . $column . '=? ' . 'LIMIT ' . intval($limit)); $statement->execute(array($value)); while (($data = $statement->fetch())) { }
Vorbereitete Anweisungen bieten einen proaktiven Abwehrmechanismus von Nutzung der Sicherheitsfunktionen des zugrunde liegenden Datenbankservers. Sie sind von Natur aus resistent gegen bekannte und unbekannte Angriffe und gewährleisten so die Integrität Ihrer Daten.
Das obige ist der detaillierte Inhalt vonReicht die Verwendung von „mysql_real_escape_string()' und „mysql_escape_string()' aus, um Ihre Anwendung zu sichern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!