Falsche ID-Eingaben und URL-Manipulationen abfangen

abakuz

Mitglied
Ich versuche falsche URL-Eingaben des Users abzufangen.
Wenn ein Seite nicht existiert, kann ja der Webserver den Fehler behandeln.

Wie mache ich es aber, wenn jemand - was ja nicht selten vorkommt - versucht, falsche id's an die DB zu senden?

z.B.:
.../beispiel.php?id=10

Wenn ich bei mir aus der id=10 eine id=789 mache, dann gibt er Fehler auf der Webseite aus, weil die id in der DB
nicht existiert. Der User soll aber diese FehlerMeldung
nicht sehen, sonder z.B.: auf eine spezielle Seite weitergeleitet werden.

mit Fehler 404 klappt es, wenn die Seite nicht existiert, aber wie mach ich das mit der id Überprüfung?


Gruß abakuz
 
PHP:
if(isset($_GET['id'])){

    $sql=mysql_query("SELECT * FROM `tabelle` WHERE id='".$_GET['id']."'");
    $count=mysql_num_rows($sql);
    
    if($count == 0){

        echo "Diese Seite ist noch nicht implementiert";

    }

}

Ich würde das zB in eine Funktionpacken, und Jedes mal überprüfen lassen, wenns gebraucht wird.
 
So groß finde ich das risiko gar nicht, denn hier werden nicht die einzellnen Daten aus der DB geladen sonder nur die Anzahl an Treffern. Und wenn er welche findet dann fährt er ganz normal mit dem vorherigen Script fort. Wenn er keine findet, dann schreibt er hin, dass diese ID nicht vorhanden ist!

Aber da ich ja mittlerweile weiß, dass du immer einen guten Grund für deine Posts hast, fänd ich es toll wenn du mir die Problematik in diesesm Fall etwas näher bringst! Besser gesagt: Was würdest du machen, wenn du HIER eine Injektion machen wolltest!
 
@nero_85:

Code:
"SELECT * FROM `tabelle` WHERE id='".$_GET['id']."'

Als böser Oberhacker würde ich natürlich gleich versuchen, für id zum Beispiel x' OR '1'='1 zu übergeben, und hätte somit deinen 'Schutz' überlistet. Deshalb: niemals unkontrollierten Userinput direkt in Queries verwenden.
 
Zuletzt bearbeitet:
Naja dann überprüfe ich eben noch ob der $_GET['id'] Wert eine Zahl ist!

PHP:
if(isset($_GET['id']) && is_numeric($_GET['id'])){ 

    $sql=mysql_query("SELECT * FROM `tabelle` WHERE id='".$_GET['id']."'"); 
    $count=mysql_num_rows($sql); 
     
    if($count == 0){ 

        echo "Diese Seite ist noch nicht implementiert"; 

    } 

}
 
Ja ja, schon klar, dass man dagegen was unternehmen kann. Der schwierige Teil ist, mögliche Bedrohungen im Vorhinein zu erkennen und zu beseitigen.

Microsoft veröffentlicht auch Patches...nachdem die Sicherheitslücken ausgenutzt worden sind.
 
Zurück