PHP $_POST's escapen PDO

12/02/2018 20:39 {Skrillex}#1
Moin,
zuerst hoffe ich, dass ich hier richtig bin.
Ich möchte gerne meine PHP-Scripte gegen SQL-Injection sichern.
Ich bin die letzten Jahre auf PHP 5.2 kleben geblieben. Nun bin ich aber auf die neueren PHP Versionen aufgestiegen und verwende nun PDO.

Bei PHP 5.2 und mssql_query konnte ich ja einfach die escape function nutzen.
PHP Code:
function ms_escape_string($data) {
        if ( !isset(
$data) or empty($data) ) return '';
        if ( 
is_numeric($data) ) return $data;

        
$non_displayables = array(
            
'/%0[0-8bcef]/',            // url encoded 00-08, 11, 12, 14, 15
            
'/%1[0-9a-f]/',             // url encoded 16-31
            
'/[\x00-\x08]/',            // 00-08
            
'/\x0b/',                   // 11
            
'/\x0c/',                   // 12
            
'/[\x0e-\x1f]/'             // 14-31
        
);
        foreach ( 
$non_displayables as $regex )
            
$data preg_replace$regex''$data );
        
$data str_replace("'""''"$data );
        return 
$data;
    } 
Bei PDO schaut das ja etwas anders aus.

Ich hörte, wenn ich mithilfe von STR Variblen und mithilfe von bindParam den Inhalt in meine Query bringe, müsste ich die Variablen nichtmehr Escapen.

Bsp.
PHP Code:
$sth $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour'
);
$sth->bindParam(':calories'$caloriesPDO::PARAM_INT);
$sth->bindParam(':colour'$colourPDO::PARAM_STR12);
$sth->execute(); 
Könnte mir jemand vielleicht eine genaue Erklärung geben wann ich in dem Falle escapen muss? Und ob ich bei nutzung dieser Funktion überhaupt Escapen muss?

Vielen dank.

Liebe Grüße
12/05/2018 20:43 Serraniel#2
#moved
12/05/2018 22:30 False#3
Quote:
Originally Posted by .:Unix:. View Post
Moin,
zuerst hoffe ich, dass ich hier richtig bin.
Ich möchte gerne meine PHP-Scripte gegen SQL-Injection sichern.
Ich bin die letzten Jahre auf PHP 5.2 kleben geblieben. Nun bin ich aber auf die neueren PHP Versionen aufgestiegen und verwende nun PDO.

Bei PHP 5.2 und mssql_query konnte ich ja einfach die escape function nutzen.
PHP Code:
function ms_escape_string($data) {
        if ( !isset(
$data) or empty($data) ) return '';
        if ( 
is_numeric($data) ) return $data;

        
$non_displayables = array(
            
'/%0[0-8bcef]/',            // url encoded 00-08, 11, 12, 14, 15
            
'/%1[0-9a-f]/',             // url encoded 16-31
            
'/[\x00-\x08]/',            // 00-08
            
'/\x0b/',                   // 11
            
'/\x0c/',                   // 12
            
'/[\x0e-\x1f]/'             // 14-31
        
);
        foreach ( 
$non_displayables as $regex )
            
$data preg_replace$regex''$data );
        
$data str_replace("'""''"$data );
        return 
$data;
    } 
Bei PDO schaut das ja etwas anders aus.

Ich hörte, wenn ich mithilfe von STR Variblen und mithilfe von bindParam den Inhalt in meine Query bringe, müsste ich die Variablen nichtmehr Escapen.

Bsp.
PHP Code:
$sth $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour'
);
$sth->bindParam(':calories'$caloriesPDO::PARAM_INT);
$sth->bindParam(':colour'$colourPDO::PARAM_STR12);
$sth->execute(); 
Könnte mir jemand vielleicht eine genaue Erklärung geben wann ich in dem Falle escapen muss? Und ob ich bei nutzung dieser Funktion überhaupt Escapen muss?

Vielen dank.

Liebe Grüße
Kurz und Knapp:
Wenn du PDO mit bindValue/bindParam nutzt musst du nichts escapen.