PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL-Injections verhindern



Lukas
19.04.2005, 15:05
Moin,

ich mache mir gerade Gedanken darüber, wie ich für mein CMS am besten SQL-Injections verhindern kann. Momentan ist die einzige Usereingabe, die in meine SQL-Strings kommt, eine Seiten-ID, die in der URL angegeben wird. Folgende Ansätze habe ich jetzt, um Injections zu verhindern:

1. Aus dem mit GET übergebenen String mit intval() eine Integer holen und die in den SQL-String bauen
2. Mit einem regulären Ausdruck (gibt's da noch andere Möglichkeiten?) überprüfen, ob der ID-String nur Integers enthält, und - falls das nicht der Fall ist - eine Fehlermeldung ausgeben.
3. Sämtliche Seiten aus der Datenbank holen und mit foreach abgleichen, welche Seite ausgegeben werden soll

Welche dieser Methoden haltet ihr für die beste? Wie verhindert ihr SQL-Injections?

Manni
19.04.2005, 16:30
Ich wäre jedenfalls für die intval-Variante - die ist imo am einfachsten. Das ganze mit RegExps zu überprüfen, wäre ein wenig zu viel Mühe. Die 3te Möglichkeit ist bei größeren Tabellen mit einigen tausend Einträgen wohl zu langsam ;)

Latency
19.04.2005, 18:05
Ich kenne noch die Möglichkeit Variablen, die als Volltext in die Datenbank eingetragen werden zuvor mit addslashes zu bearbeiten.

Alternativ MagicQuotes beim Server einschalten, die bieten nämlich auch einen Schutz vor SQL-Injections.

dadie
19.04.2005, 18:28
Mmmm.

Also in meinem CMS System habe ich dafür 2 Schutz systeme.

1,Nur Init ist zugelassen.
2,Nur wenn die ID Vorhanden ist wird ein Script ausgefürt anderrn falls wird zu einer Error.html die nix weiter tuht als die Tamplete error.CHMST datei auszulesen (CHMST ist meine Tamplete datei ^^ )

Dingsi
19.04.2005, 18:48
mysql_escape_string() (http://www.php.net/mysql_escape_string), htmlspecialchars() (http://www.php.net/htmlspecialchars), addslashes() (http://www.php.net/addslashes)