PHP GET in sql-Abfrage

Sarius87

Banned
Registriert
Mai 2016
Beiträge
888
hallo, habe diesen code :

PHP:
$linkid=$_GET['linkid'];
$sql="SELECT origlink FROM link WHERE linkid='$linkid'";

doch das muss doch auch so gehen ohne dass ich vorher die lokale variable erstelle, oder ??

aber das hier geht einfach nicht :
PHP:
$sql="SELECT origlink FROM link WHERE linkid=".$_GET['linkid']."";

was ist da falsch bitte ?
 
Versuch mal:

PHP:
$sql = 'SELECT origlink FROM link WHERE linkid="' . $_GET['linkid'] . '"';
 
Google mal nach SQL Injections und wie man diese mit Prepared Statements verhindert, die Zeile da allein reicht aus dass dir deine ganze Datenbank gehackt werden kann.
 
Sarius87 schrieb:
was ist da falsch bitte ?

syntaktisch: siehe was boula schrieb; dir fehlen die quotation marks um den wert der variablen in der sql-anweisung.
generell: stell dir mal vor, ich setze in der URL (wo $_GET den wert herbekommt) den parameter "linkid" auf folgendes:
Code:
'; DROP TABLE link; --
falls dir nicht sofort klar ist, was da passiert:
  • die ersten zwei zeichen beenden das vorangegangene statement
  • das naechste statement loescht deine komplette link-tabelle
  • die letzten beiden zeichen kommentieren alles was nach der variable linkid eingefuegt wird aus; das wird nicht ausgefuehrt

diese angriffsmethode nennt sich sql injection. du musst jetzt nicht anfangen zu ueberlegen, wie du deine eingaben dagegen filtern musst, denn es gibt in PHP bereits eine moeglichkeit, das den datenbanktreiber machen zu lassen. und zwar ueber prepared statements. lern das lieber gleich richtig.
 
ForestKoepp: Der Link von dir ist leider auch gänzlich untauglich. Die mysql-Extension gibt es in den neueren PHP-Versionen nicht mehr und die richtige Lösung sind und waren immer Prepared Statements, nicht dieses Rumgehampel mit Escaping. Code und Daten sollte man richtig trennen.
 
Sarius87 schrieb:
hallo, habe diesen code :

PHP:
$linkid=$_GET['linkid'];
$sql="SELECT origlink FROM link WHERE linkid='$linkid'";

doch das muss doch auch so gehen ohne dass ich vorher die lokale variable erstelle, oder ??

aber das hier geht einfach nicht :
PHP:
$sql="SELECT origlink FROM link WHERE linkid=".$_GET['linkid']."";

was ist da falsch bitte ?

was DA falsch ist, sind die zwei anführungszeichen am ende. warum das generell bad practice ist, wurde hier ja schon zu genüge erläutert.. ;)
 
Sarius87 schrieb:
hallo, habe diesen code :

PHP:
$linkid=$_GET['linkid'];
$sql="SELECT origlink FROM link WHERE linkid='$linkid'";

Wirf ihn bitte weg.

Sarius87 schrieb:
was ist da falsch bitte ?

Einfach alles...

* Das nicht-Filtern von User Inputs (filter_input...)
* Die im Thread bereits erwähnte Möglichkeit einfache SQL-Injections via GET-Parameter auszuführen.
* Eine ID sollte in einer Datenbank wohl eher Char by Char verglichen werden (LIKE statt =), ansonsten können je nach verwendeter Collation unvorhergesehene Dinge passieren ('ä' = 'ae' = wahr; vise versa, uvm.)
* Das nicht beachten der sonst üblichen Coding Style Guideline (PSR-12 Punkt 6)
 
Zurück
Oben