Antwort
 
Themen-Optionen Thema durchsuchen
Alt 25.12.2005, 12:37 Nach oben    #1
bob
o_O
 
Registriert seit: 18.08.2005
Ort: Essen
Beiträge: 159
Standard

Hallo, ich habe mich bei Wikipedia und google mal ein bisschen schlau gemacht bzgl. SQL-Injections über der URL.


Da habe ich gesehen das es relativ einfach ist ohne das escapen von Strings diese injections durchzuführen.

Meine Frage daher, ist dieser Code "sicher" vor injections?

PHP-Code:
$query "SELECT * FROM artikel WHERE id='".mysql_real_escape_string($_GET['id'])."' "
Für weitere Tips und Links bzlg dieses Thema wäre ich dankbar!

PS:
Bevor ich gleich wieder ein Link an den Kopf geschmissen bekomme bzgl "warum sollte ich nicht SELECT * FROM verwenden" Das habe ich jetz einfahc mal nur so gemacht
__________________
Grüsse aus Essen,
bob

Geändert von Ben (25.12.2005 um 13:43 Uhr) Grund: bbCode ausgebessert
bob ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.12.2005, 13:18 Nach oben    #2
Jay
Gast
 
Beiträge: n/a
Standard

ja eigentlich schon. du solltest aber vielleicht zuerst noch prüfen ob es sich bei der id um eine Zahl handelt oder gleich sowas

PHP-Code:
$id preg_replace("/[^0-9]{1,}/",'',$_GET['id']);
$id mysqli_real_escape_string($id); 
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.12.2005, 13:36 Nach oben    #3
Corvin Gröning
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 459
Standard

http://forum.developers-guide.net/sh...t=688#post6010
__________________
Corvin ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.12.2005, 16:23 Nach oben    #4
bob
o_O
 
Registriert seit: 18.08.2005
Ort: Essen
Beiträge: 159
Standard

Kann man es nich besser so überprüfen

PHP-Code:
if (is_numeric($_GET['id'])) 

{
//meine artikel
}
else
{
fehlermeldung etc.. 


Danke für den Link, ich habe den natürlich schon vorher gesehen ..
wollte nur mal wissen, ob es noch andere möglichkeiten gibt.


Vielen Dank,
bob
__________________
Grüsse aus Essen,
bob
bob ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.12.2005, 16:42 Nach oben    #5
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.208
Standard

numeric kann auch ne komma-zahl sein
robo47 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.12.2005, 19:08 Nach oben    #6
Jay
Gast
 
Beiträge: n/a
Standard

Da musst du mit is_int prüfen wenn du auf ne ganze zahl aus bist.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.12.2005, 20:23 Nach oben    #7
bob
o_O
 
Registriert seit: 18.08.2005
Ort: Essen
Beiträge: 159
Standard

"is_int(eger)" klappt nicht

if(!is_int($_GET['id']))
{
echo '<b>Die Artikel ID ist nicht gültig</b>';
}

Der Artikel z.B id=15 ist ganz klar vom Typ int, allerdings bekomme ich immer zu "hören" das Die artikel ID nicht gülig sei ...
__________________
Grüsse aus Essen,
bob
bob ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.12.2005, 02:13 Nach oben    #8
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

$_GET['id'] wird als String übergeben. Das kannst du der Testausgabe mit var_dump() entnehmen.

Eine einfache Konvertierung mit (int) bringt jetzt nichts, weil auch "xyz" danach ein int wäre .. 0 wenn mich nicht alles täuscht.

Du kannst also entweder mit einem regulären Ausdruck sicherstellen, dass es sich um eine ganze Zahl handelt oder du nutzt z.B. die Funktion floor().

Im Beispiel:
PHP-Code:
<?php
     
     
if(array_key_exists('ID'$_GET)) {
         
         
         
/*
          * Diese Testausgabe des $_GET-Arrays zeigt, was man wissen will.
          * Der Wert der ID wird als String übergeben.
          */
         
echo '<pre>';
         
var_dump($_GET);
         echo 
'</pre>';
         
         
$id $_GET['ID'];
         
         if(
is_numeric($id)) {
             
             
/* 
              * falls es sich um eine Dezimalzahl handelt machen wir einfach eine ganze 
              * Zahl daraus
              */
             
$id floor($id);
             
             
// jetzt kannst man die ID in einer SQL Anweisung verwenden
             
echo '<p>Die ID ist ' $id '.</p>';
         }
         else {
             echo 
'<p>Die Artikel-ID ist vom falschen Typ.</p>';
         }

     }
         
     
// Testlink ausgeben.
     
echo '<a href="' $_SERVER['PHP_SELF'] . '?ID=1">Artikel ID 1</a>
           <br />
           <a href="' 
$_SERVER['PHP_SELF'] . '?ID=xyz">Artikel ID xyz</a>';
     
?>
Hier in Aktion:
http://developers-guide.net/scriptar...trol_types.php

Ist etwas kompliziert ... irgendwie ..

Grüße Ben.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.12.2005, 17:02 Nach oben    #9
bob
o_O
 
Registriert seit: 18.08.2005
Ort: Essen
Beiträge: 159
Standard

Dankeschön ...
__________________
Grüsse aus Essen,
bob
bob ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.12.2005, 13:55 Nach oben    #10
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Alternativ zu Konvertierung auch ein einfacher RegExp, wobei die Konvertierung natürlich schneller ist :]
PHP-Code:
if ( !preg_match('#^\d+$#'$_GET['id']) ) 
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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 sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abkürzung des Wochentags in SQL, vgl. strftime in PHP Ben Datenbanken 4 12.04.2007 16:51
Variable in SQL anweisung kampfgnom Datenbanken 3 16.01.2007 16:39
Ein wenig SQL Sclot Datenbanken 4 29.11.2006 08:27
Zugriff auf Wert des vorhergenden Datensatzes in einer SQL Abfrage Jay Datenbanken 5 17.07.2006 15:25
sql injection robo47 Plauderecke 3 18.05.2006 16:24


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45