Strtr + PDO是否足够安全?

时间:2018-09-07 12:13:07

标签: php pdo xss sql-injection

我正在使用PDO处理我的MySQL数据库。

为了保护我的网站不受SQL Injections的侵扰,我使用的是预备语句:

 $query = $pdo->prepare('SELECT * FROM tablename WHERE id = ?');
 $query->execute([3]);

但是现在这允许传递特殊字符,所以我决定使用htmlentities

htmlentities($string, ENT_QUOTES, 'UTF-8');

但这仍然允许像*()[]!-/\=这样的字符通过。在这一点上,我认为这个字符不能做很多事情,但是我发现如果我也不能逃避这些字符,我将不高兴,因此我放弃了htmlentities并决定使用:

$characters = [
    '\'' => ''', 
    '"' => '"', 
    ';' => '&#59;', 
    '-' => '-', 
    '*' => '*', 
    '=' => '=', 
    '/' => '/', 
    '\\' => '\',
    '!' => '!',
    '[' => '[',
    ']' => ']',
    '<' => '&#60;',
    '>' => '&#62;'
];
$string = strtr($string, $characters);

这很好用,但是,这样做是个好主意吗?还是应该使用另一种方法来获得所需的结果? (用等价的HTML代码替换字符)。

如果有更好的方法可以做到这一点,您能帮助我理解吗?

0 个答案:

没有答案