我正在使用PDO
处理我的MySQL
数据库。
为了保护我的网站不受SQL Injections
的侵扰,我使用的是预备语句:
$query = $pdo->prepare('SELECT * FROM tablename WHERE id = ?');
$query->execute([3]);
但是现在这允许传递特殊字符,所以我决定使用htmlentities
:
htmlentities($string, ENT_QUOTES, 'UTF-8');
但这仍然允许像*()[]!-/\=
这样的字符通过。在这一点上,我认为这个字符不能做很多事情,但是我发现如果我也不能逃避这些字符,我将不高兴,因此我放弃了htmlentities
并决定使用:
$characters = [
'\'' => ''',
'"' => '"',
';' => ';',
'-' => '-',
'*' => '*',
'=' => '=',
'/' => '/',
'\\' => '\',
'!' => '!',
'[' => '[',
']' => ']',
'<' => '<',
'>' => '>'
];
$string = strtr($string, $characters);
这很好用,但是,这样做是个好主意吗?还是应该使用另一种方法来获得所需的结果? (用等价的HTML代码替换字符)。
如果有更好的方法可以做到这一点,您能帮助我理解吗?