mysql - Was muss ich beim Senden einer Anfrage beachten?

Translate

Wenn Sie eine SQL-Abfrage ausführen, müssen Sie Ihre Zeichenfolgen bereinigen, oder Benutzer können schädliches SQL auf Ihrer Website ausführen.

Ich habe normalerweise nur eine Funktion Escape_String (bla), die:

  • Ersetzt Fluchten (\) mit doppelten Fluchten (\\).
  • Ersetzt einfache Anführungszeichen (') mit einem einfachen Anführungszeichen (\').

Ist das ausreichend? Gibt es ein Loch in meinem Code? Gibt es eine Bibliothek, die dies schnell und zuverlässig für mich erledigt?

Ich würde gerne elegante Lösungen in Perl, Java und PHP sehen.

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Verwenden Sie für maximale Sicherheit, Leistung und Korrektheit vorbereitete Anweisungen. So geht's mit vielen Beispielen in verschiedenen Sprachen, einschließlich PHP:

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks

Quelle
Translate

Ich würde auch Kommentaren entkommen (Doppelstrich)

--
Quelle
Translate

Eine großartige Sache, um in PHP zu verwenden, ist diePDO. Das Sichern Ihres SQL (und all Ihrer SQL-Inhalte im Allgemeinen) erfordert viel Rätselraten. Es unterstützt vorbereitete Anweisungen, die einen großen Beitrag zur Verhinderung von SQL Injection Attacks leisten.

Das Buch enthält eine großartige Einführung in die gUDie PHP Anthology 101 Grundlegende Tipps, Tricks & Hacks von Davey Shafik usw. 2nd Ed. Macht das Lernen zum Kinderspiel und eignet sich hervorragend als Referenz. Ich muss nicht einmal mehr an etwas anderes als die eigentliche SQL-Abfrage denken.

Quelle
Translate

Welche Sprache verwenden? Es scheint, als hätten fast alle integrierte SQL-Escape-Funktionen, die besser zu verwenden wären.

Zum Beispiel hat PHPmysql_real_escape_stringundfügt Schrägstriche hinzu.

Quelle
Translate

Verwenden Sie besser vorbereitete Anweisungen mit Platzhaltern. Verwenden Sie PHP, .NET ... so oder so, vorbereitete Anweisungen bieten mehr Sicherheit, aber ich könnte ein Beispiel bereitstellen.

Quelle
Translate

In PHP verwende ich dieses und ich freue mich über jeden Kommentar dazu:

function quote_smart($valeur) 
{ 
    if (get_magic_quotes_gpc()) 
        $valeur = stripslashes($valeur); 

    if (!is_numeric($valeur)) 
        $valeur = mysql_real_escape_string($valeur); 

    return $valeur; 
}


$IdS = quote_smart($_POST['theID']); 
$sql = " 
SELECT * FROM Students 
WHERE IdStudent={$IdS}; 
";

Benötigt eine weitere Überprüfung, wenn ein Feld NULL sein kann:

$picture = NULL;
$theidyouwant = 7;
$Name = 'WOOD';


if(is_null($picture)) 
    $p = 'NULL'; 
else
    $p = "'".quote_smart($picture)."'"; 

$IdS = quote_smart($theidyouwant);

$requete = "SELECT * FROM Students
    WHERE IdStudent={$IdS} AND
    PictureStudent={$p} AND
    NameStudent='{$Name}';
    ";

Das macht es Spaß! (Ich hoffe, der Beitrag sendet korrekt Unterstriche und nicht & # 95;)

Quelle
Translate

Verwenden Sie vorbereitete / parametrisierte Abfragen!

Quelle
King Lee
Translate

Verwenden Sie vorbereitete Anweisungen.

Quelle
Translate

Stellen Sie bei der Verwendung von LIKE in der MySQL-Abfrage auch sicher, dass die Zeichen "_" maskiert werden, da sie nicht von mysql_real_escape_string maskiert werden.

Überprüfen Sie als ReferenzHier

Quelle
BCS
Translate

Die MySQL C-API hat ihre eigenemysql_escape_string(). Verwenden Sie es oder es ist gleichwertig wäre am besten.

Quelle
Bob
Translate

Ich bin nicht sicher, ob MySQL parametrisierte Abfragen unterstützt. Wenn ja, sollten Sie sich bemühen, diesen Weg zu gehen. Dadurch wird sichergestellt, dass die Benutzereingaben nichts Bösartiges bewirken können.

Andernfalls wären einige "schlechte" Zeichen zusätzlich zu dem, was Sie erwähnt haben, Semikolon (;) und Kommentare (- und / * * /).

Quelle