Heim >Datenbank >MySQL-Tutorial >Reichen „mysql_real_escape_string()' und „mysql_escape_string()' aus, um meine Webanwendung vor SQL-Injection zu schützen?

Reichen „mysql_real_escape_string()' und „mysql_escape_string()' aus, um meine Webanwendung vor SQL-Injection zu schützen?

Susan Sarandon
Susan SarandonOriginal
2024-12-13 03:16:14771Durchsuche

Are `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure My Web Application Against SQL Injection?

Sind mysql_real_escape_string() und mysql_escape_string() für die Anwendungssicherheit ausreichend?

Diese Funktionen können zwar den Datenschutz verbessern, reichen aber nicht aus Schützen Sie Webanwendungen vollständig vor allen Sicherheitsrisiken.

SQL Injection

  • Mysql_escape_string() kann Sie immer noch anfällig für SQL-Injection-Angriffe machen, insbesondere wenn variable Daten in Abfragen verwendet werden.

LIKE SQL Attacks

  • LIKE-Abfragen mit Parametern wie „�ta%“ können ausgenutzt werden, um alle Datensätze oder zurückzugeben Geben Sie vertrauliche Informationen preis, beispielsweise vollständige Kreditkartennummern.

Charset-Exploits

  • Internet Explorer ist weiterhin anfällig für Charset-Exploits, die böswilligen Akteuren Zugang verschaffen können Fernsteuerung der Datenbank.

LIMIT Exploits

  • Mysql_real_escape_string() ist gegen LIMIT-Exploit-Angriffe unwirksam, die durch Manipulation des LIMIT-Werts beliebige SQL-Abfragen ausführen können.

Proaktive Verteidigung: Vorbereitete Aussagen

  • Anstatt sich ausschließlich darauf zu verlassen Wenn Sie entkommen, sollten Sie vorbereitete Anweisungen verwenden, um eine unerwartete SQL-Ausführung zu verhindern.
  • Vorbereitete Anweisungen erzwingen eine gültige serverseitige SQL-Syntax und mindern so die Risiken bekannter und unbekannter Schwachstellen.

Codebeispiel

Hier ist ein Vergleich von mysql_escape_string() und vorbereiteten Anweisungen in PHP:

// Escaping Method
$sql = sprintf("SELECT url FROM GrabbedURLs WHERE %s LIKE '%s%%' LIMIT %s",
               mysql_real_escape_string($argv[1]),
               mysql_real_escape_string($argv[2]),
               mysql_real_escape_string($argv[3]));

// Prepared Statement
$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));

Vorbereitete Anweisungen sind zwar etwas länger in der Implementierung, bieten aber überlegenen Schutz vor böswilligen SQL-Abfragen und reduzieren die Codekomplexität.

Das obige ist der detaillierte Inhalt vonReichen „mysql_real_escape_string()' und „mysql_escape_string()' aus, um meine Webanwendung vor SQL-Injection zu schützen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn