php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.05.2007, 15:58  
Gast
 
Beiträge: n/a
Standard sql-injections vermeiden per Negativliste

hi,
ich bin vor einiger Zeit bei einem Projekt eingestiegen(nur eine kleine Community). Ich würde jetzt gerne anfangen und den Code so zu ändern, dass SQL-Injections ausgeschloßen sind. Allerdings hab ich keine Lust jeden Query mit mysql_real_escape_string() und stripslashes zu bearbeiten, zu mal auch leider keine SQL-Klasse verwendet wird. Ich hab mir nun überlegt, am Anfang des Skriptes alle Variablen aus $_REQUEST, mit stristr nach insert,delete,update,drop und einem ";" zu untersuchen. Das müsste mir theoretisch doch schon reichen bei queries a la "select xy from xy where ..."
Injections auszuschließen. Ist das richtig, oder mach ich da nen Denkfehler?

lg,
André
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 27.05.2007, 17:03  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo,
zusätzlich zu $_REQUEST würde ich noch $_GET, $_POST und $_COOKIE überprüfen. Der Test auf Schlagworte ist nicht sinnvoll, schließlich kann eine Person ja einen Namen haben, in dem zB "drop" vorkommt. Vielmehr solltest du versuchen zu verhindern, dass Daten als Code interpretiert werden können.
Das kannst du allerdings nur gewährleisten, wenn du nicht nur das simple addslashes(), sondern für SQL-Daten mysql_real_escape_string() verwendest.
Zergling-new ist offline  
Alt 27.05.2007, 17:44  
Gast
 
Beiträge: n/a
Standard

deswegen hab ich mir überlegt, noch zusätzlich nach dem Semikolon zu suchen, so dass der Username schon "drop;" sein müsste.
Aber mysql_real_escape_string() ist wohl wirklich die beste Methode.
 
Alt 27.05.2007, 19:44  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

DROP; ist ja auch kein gültiger SQL-Befehl. Dann müsstest du schon reguläre Ausdrücke verwenden, aber es gibt soviel schädliche Befehle (ALTER TABLE), da vergißt du bestimmt was.
Zergling-new ist offline  
Alt 27.05.2007, 20:22  
Gast
 
Beiträge: n/a
Standard

Ich hab mir das dann eher so gedacht:
if(stristr($var,"drop") && stristr($var,";"))
boese_buben_hauen();

weil ein SQL-Injection,der einen SELECT-Query missbraucht müsste ja im Endeffekt so aussehen:

SELECT * FROM `tabelle` WHERE `id`=''; DROP DATABASE `datenbank`;--';
 
Alt 28.05.2007, 14:00  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

DELETE FROM abc WHERE ID = 12
DELETE FROM abc WHERE ID = 0 OR 1=1

DELETE FROM abc WHERE ID = '12'
DELETE FROM abc WHERE ID = '' OR 1=1 --'
DELETE FROM abc WHERE ID = '' OR '1'='1'

SELECT * FROM auth WHERE User = 'Horst' AND Pwd = 'Zwerg'
SELECT * FROM auth WHERE User = 'Horst' /* AND Pwd = '0815'

ganz ohne ;
nikosch ist gerade online  
Alt 29.05.2007, 13:38  
Neuer Benutzer
 
Registriert seit: 22.05.2006
Beiträge: 14
Hasso
Standard

Zitat:
Zitat von Zergling
zusätzlich zu $_REQUEST würde ich noch $_GET, $_POST und $_COOKIE überprüfen.
Bisher dachte ich immer, in $_REQUEST wären $_GET, $_POST und $_COOKIE enthalten?
Im PHP-Handbuch steht zu $_REQUEST:
Zitat:
Ein assoziatives Array, das die Inhalte der Arrays $_GET, $_POST und $_COOKIE enthält.
Warum also diese noch zusätzlich prüfen?
__________________
Hasso
Hasso ist offline  
Alt 29.05.2007, 14:42  
Gast
 
Beiträge: n/a
Standard

OK überzeugt .
Ich hab schon angefangen überall erstmal mysql_real_escape_string() reinzusetzen.
Ich hab gedacht, dass die Shlashes auch in der DB dann stehen würden, ab das liebe DB-System macht die netterweise wieder raus, bevor sie eingetragen werden.
 
Alt 29.05.2007, 15:27  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von Hasso
Zitat:
Zitat von Zergling
zusätzlich zu $_REQUEST würde ich noch $_GET, $_POST und $_COOKIE überprüfen.
Bisher dachte ich immer, in $_REQUEST wären $_GET, $_POST und $_COOKIE enthalten?
Im PHP-Handbuch steht zu $_REQUEST:
Zitat:
Ein assoziatives Array, das die Inhalte der Arrays $_GET, $_POST und $_COOKIE enthält.
Warum also diese noch zusätzlich prüfen?
Natürlich musst du nur die Variablen validieren, die du auch verwendest. Wenn du nur auf die Daten in $_REQUEST zugreifst, musst du eben auch nur diese validieren. Ich meinte nur es ist ein Irrglaube $_REQUEST zu validieren und dann zu denken, auch die $_GET, $_POST und $_COOKIE-Daten wären sicher. Es sind ja jeweils unabhängige Kopien der Daten. Vielleicht haben wir uns hier mißverstanden (wer wen weiß ich nicht )

Ich verwende $_REQUEST nicht so gerne, weil dann nicht klar ist, woher ich die Daten erwarte. Außerdem können sich die Schlüssel überlappen. Nehmen wir an ich speichere in $_COOKIE['user'] den Namen des Benutzers oder seine ID und biete auf der gleichen Seite eine User-Suche an, dessen Eingabefeld auch user heißt. Kommt bestimmt nicht oft vor, aber so unwahrscheinlich ist die Situation ja nicht.
Zergling-new ist offline  
Alt 29.05.2007, 18:31  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Zitat von Zergling
Ich verwende $_REQUEST nicht so gerne, weil dann nicht klar ist, woher ich die Daten erwarte. Außerdem können sich die Schlüssel überlappen. Nehmen wir an ich speichere in $_COOKIE['user'] den Namen des Benutzers oder seine ID und biete auf der gleichen Seite eine User-Suche an, dessen Eingabefeld auch user heißt. Kommt bestimmt nicht oft vor, aber so unwahrscheinlich ist die Situation ja nicht.
Geschweige denn im Kontext eines Angriffszenarios. Beim Verwenden von $_REQUEST kann ich u.U. (diese Umstände sind z.B. die richtige gpc Order) übetr die URL alle Daten überschreiben, die eigentlich per POST oder gar aus nem COOKIE erwartet werden. Sicherlich ein falscher Schritt betrachtet man das Thema des Threads.
nikosch ist gerade online  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Doppelte mails vermeiden ... irgendwo ist ein bug... joghurt PHP Tipps 2008 15 03.10.2007 18:45
SQL Injections hans.karl2 PHP Tipps 2007 12 26.07.2007 20:12
Umbruch vermeiden?! dh1sbg HTML, Usability und Barrierefreiheit 5 22.05.2007 20:05
global vermeiden phpbeginner PHP Tipps 2007 4 29.12.2006 15:25
Doppelte E-Mail bei der Anmweldung vermeiden Matthiasnet PHP Tipps 2006 10 05.10.2006 20:10
doppelte ausgabe vermeiden imported_kremser Datenbanken 2 17.11.2005 18:35
Durcheinander in der DB vermeiden Datenbanken 5 08.09.2005 19:19
MySQL Tabelle durchsuchen und dabei Dopplungen vermeiden Plague PHP Tipps 2005-2 5 06.09.2005 00:46
sicherheitslücken per $_GET vermeiden. PHP Tipps 2005-2 26 04.08.2005 11:16
Ich will Fehlermeldung vermeiden. Zero.exe PHP Tipps 2005-2 2 02.08.2005 13:11
[Erledigt] Doppeltes Auslesen vermeiden Datenbanken 6 31.01.2005 08:25
nach form-tags zeilenumbruch vermeiden! HTML, Usability und Barrierefreiheit 2 24.09.2004 10:08
Untersteichung eines Links vermeiden. Wie ??? HTML, Usability und Barrierefreiheit 7 04.09.2004 14:20

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql negativliste, sql injection negativliste, netativlist methode injection, sql 2005 injection verhindern, negativliste sql, sql injections negativliste, sql injection verhindern, sql injection verhindern negativlisten, negativliste injection, sql injection negativlist, negativlisten sql, php sql injection negativliste, validieren des $_get array php, php get injections, $_cookie sql injection

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:32 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.