Frage

Beim ausführen einer SQL-Abfrage, die Sie haben zu reinigen Sie Ihre Saiten oder die Benutzer ausführen können schädliche SQL auf Ihrer website.

Ich in der Regel nur eine Funktion haben escape_string(bla), die:

  • Ersetzt entweicht (\) mit Doppel entweicht (\\).
  • Ersetzt das einfache Anführungszeichen (') mit Escapezeichen single quote (\').

Ist dies ausreichend?Da ist ein Loch in meinem code?Gibt es eine Bibliothek, die dies tun können, schnell und zuverlässig für mich?

Ich möchte sehen, wie anmutig Lösungen in Perl, Java und PHP.

War es hilfreich?

Lösung

Für maximale Sicherheit, Leistung und Richtigkeit verwenden Sie vorbereitete Anweisungen.Hier ist, wie dies mit vielen Beispielen in verschiedenen Sprachen, einschließlich PHP:

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

Andere Tipps

Ich würde auch die Flucht Kommentare (double dash)

--

Eine tolle Sache für den Einsatz in PHP ist die PDO.Es braucht eine Menge Rätselraten im Umgang mit der Sicherung Ihrer SQL (und alle Ihre SQL-Sachen im Allgemeinen).Es unterstützt prepared statements, die gehen einen langen Weg zur Abwehr von SQL-Injection-Angriffe.

Eine gute Grundierung auf PDO ist im Buch enthalten Die PHP-Anthologie 101 Essential Tips, Tricks & Hacks von Davey Schafik etc.2nd Ed.Macht das lernen zum Kinderspiel und ist hervorragend als Nachschlagewerk.Ich weiß nicht einmal, zu denken, über etwas anderes als die tatsächliche SQL-Abfrage nicht mehr.

Welche Sprache verwenden?Wie es scheint, so ziemlich alle von Ihnen verfügen über integrierte SQL-escape-Funktionen, die besser zu verwenden.

Für Beispiel, PHP mysql_real_escape_string und addslashes.

Du bist besser dran mit prepared statements mit Platzhalter.Sind Sie mit PHP, .NET...entweder Weg, die vorbereitete Anweisungen bieten mehr Sicherheit, aber ich konnte eine Probe geben.

In PHP bin ich mit diesem ein, und ich werden schätzen jeden Kommentar darüber :

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}; 
";

Muss noch eine überprüfung, ob 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 ist es, genießen Sie es !(hoffe die post wird richtig senden unterstreicht und nicht _ ;)

Verwenden Sie Vorbereitet/Parametrisierte Abfragen!

Verwenden Sie vorbereitete Anweisungen.

In MySQL-Abfrage, bei der Verwendung WIE auch sicherstellen, dass aus den " _ " - Zeichen, da es nicht entgangen, indem mysql_real_escape_string.

Für Referenz, überprüfen Sie hier

die MySQL-C-API hat eine eigene mysql_escape_string().Mit es, oder es ist äquivalent wäre am besten.

Ich bin nicht sicher, ob MySql unterstützt parametrisierte Abfragen, wenn ja, Sie sollten sich bemühen, diesen Weg zu gehen.Dies gewährleistet, dass die Benutzer die Eingabe kann nichts bösartiges.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top