Was muss ich entkommen, wenn eine Abfrage zu senden?

stimmen
18

Wenn Sie eine SQL-Abfrage ausführen, müssen Sie Ihre Strings oder Benutzer können böswilligen SQL auf Ihrer Webseite ausführen reinigen.

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

  • Ersetzt entkommt ( \() mit Doppel entkommt \\).
  • Ersetzt einfache Anführungszeichen ( ') mit einem entflohenen Apostroph ( \').

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

Ich mag anmutige Lösungen in Perl, Java und PHP sehen.

Veröffentlicht am 05/08/2008 um 19:45
quelle vom benutzer
In anderen Sprachen...                            


11 antworten

stimmen
7

Für ein Höchstmaß an Sicherheit, Leistung und Richtigkeit vorbereitete Anweisungen verwenden. Hier ist, wie dies zu tun, mit vielen Beispielen in verschiedenen Sprachen, einschließlich PHP:

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

Beantwortet am 05/08/2008 um 20:38
quelle vom benutzer

stimmen
2

Ich würde auch entkommen Kommentare (Doppelstrich)

--
Beantwortet am 05/08/2008 um 19:46
quelle vom benutzer

stimmen
1

Eine große Sache in PHP zu verwenden , ist die PDO . Es braucht viel das Rätselraten aus Umgang mit SQL - Sicherung (und alle Ihrer SQL Sachen im Allgemeinen). Es unterstützt vorbereitete Anweisungen, die einen langen Weg zur Vereitelung SQL - Injection - Attacken gehen.

Ein großer Grundierung auf PDO wird in dem Buch The PHP Anthology 101 Essential Tips, Tricks & Hacks von Davey Shafik usw. 2nd Ed . Mach ein Kinderspiel zu lernen und ist ausgezeichnet als Referenz. Ich muss alles nicht einmal denken , andere als die tatsächliche SQL Query mehr.

Beantwortet am 05/08/2008 um 20:28
quelle vom benutzer

stimmen
0

In MySQL-Abfrage, bei der Verwendung von LIKE, auch sicherstellen, dass die „_“ Zeichen zu entkommen, da sie nicht durch mysql_real_escape_string entgangen ist.

Als Referenz überprüfen hier

Beantwortet am 14/10/2008 um 05:57
quelle vom benutzer

stimmen
0

Verwenden Sie vorbereitete Anweisungen.

Beantwortet am 16/09/2008 um 22:14
quelle vom benutzer

stimmen
0

der MySQL - C - API verfügt über eine eigene mysql_escape_string(). Mit ihm oder es ist gleichwertig am besten wäre.

Beantwortet am 14/08/2008 um 18:59
quelle vom benutzer

stimmen
0

Verwenden Sie Bearbeitete / parametrisierte Abfragen!

Beantwortet am 05/08/2008 um 20:55
quelle vom benutzer

stimmen
0

In PHP, verwende ich diese und ich werde jeden Kommentar darüber zu schätzen wissen:

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

Braucht man mehr Ü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! (Hoffen, dass die Post korrekt Unterstrichen senden und nicht & # 95;)

Beantwortet am 05/08/2008 um 20:21
quelle vom benutzer

stimmen
0

Du bist besser dran Prepared Statements mit Platzhalter verwenden. Sind Sie mit PHP, .NET ... so oder so, Prepared Statements mehr Sicherheit bieten, aber ich konnte eine Probe zur Verfügung stellen.

Beantwortet am 05/08/2008 um 19:48
quelle vom benutzer

stimmen
0

Welche Sprache verwenden? Es scheint, wie so ziemlich alle von ihnen haben eingebaute SQL-Escape-Funktionen, die besser wäre, zu verwenden.

Zum Beispiel hat PHP mysql_real_escape_string und addslashes .

Beantwortet am 05/08/2008 um 19:46
quelle vom benutzer

stimmen
-1

Ich bin nicht sicher, ob MySql parametrisierte Abfragen unterstützt, wenn dies der Fall, sollten Sie sich bemühen, diesen Weg zu gehen. Dadurch wird sichergestellt, der Benutzer-Eingang kann nichts tun bösartig.

Andernfalls werden einige „schlechte“ Zeichen zusätzlich zu dem, was Sie erwähnt würden Semikolon (;) und Kommentare (- und / * * /).

Beantwortet am 05/08/2008 um 19:49
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more