Variable an einer SQL-Abfrage sicher übergeben

09/03/2018 03:14 Cc_Cc_Cc#1
Hi liebe Com,

ich habe die Variable Counter in einer SQL-Abfrage als Limit gespeichert.

Jetzt könnte man es z.b so manipulieren: (siehe Video);


Jetzt wollte ich auf Nummer sicher gehen und euch fragen worauf ich noch achten sollte, wenn ich eine Variable übergebe an eine SQL-Abfrage.

Habt ihr noch Tipps?


Das im Video hab ich mit der ABS() Funktion behoben.

Zurzeit sieht es so aus, für die Sicherheit der Variable, die zu übergeben ist:

PHP Code:
    if(isset($_POST['counter'])) :

        if(!
is_numeric($_POST['counter'])) :
            exit(
"Kein Integer");
        endif;
        
        
            
$counter filter_var($_POST['counter'], FILTER_SANITIZE_NUMBER_INT);

            
$counter abs($counter);

     endif; 
09/03/2018 06:52 Serraniel#2
Bei SQL auf jeden Fall mit Parametern und Prepared Statements arbeiten und die variable nicht direkt in dem SQL String einfügen, da das anfällig gegen Injections ist.
09/03/2018 15:53 Cc_Cc_Cc#3
Quote:
Originally Posted by Serraniel View Post
Bei SQL auf jeden Fall mit Parametern und Prepared Statements arbeiten und die variable nicht direkt in dem SQL String einfügen, da das anfällig gegen Injections ist.
Ich möchte ja da auch PDO einsetzen, aber er zeigt mir diese Fehlermeldung an:

Quote:
Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''5'' at line 1 )

Code: (kleiner Abschnitt)
PHP Code:
    $sql $pdo->prepare("SELECT * FROM USER LIMIT :counter;");
    
    
$param = [":counter" => "{$counter}"];
    
    if(!
$sql->execute($param)) {
        
print_r($sql->errorInfo());
    } 
erscheint diese Fehlermeldung:
09/03/2018 16:28 False#4
Quote:
Originally Posted by Cc_Cc_Cc View Post
Ich möchte ja da auch PDO einsetzen, aber er zeigt mir diese Fehlermeldung an:




Code: (kleiner Abschnitt)
PHP Code:
    $sql $pdo->prepare("SELECT * FROM USER LIMIT :counter;");
    
    
$param = [":counter" => "{$counter}"];
    
    if(!
$sql->execute($param)) {
        
print_r($sql->errorInfo());
    } 
erscheint diese Fehlermeldung:
Folgendes sollte schöner aussehen und auch ohne Probleme funktionieren (nur aus dem gedachniss geschrieben.. ob c&p klappt weiß ich nicht).
Dient ja auch nur als Beispiel.
PHP Code:
$sql "
   SELECT
      *
   FROM user
   LIMIT :limit
"
;
$stmt $pdo->prepare($sql);
$stmt->bindValue('limit'$counterPDO::PARAM_INT);
$stmt->execute(); 
Bitte nutzt nicht diesen wiederlichen Syntax mit "endif" und nutz kein * in Queries..