我读过这已经足够了,甚至建议在输出上转义字符,而不是在输入上。
它可以很容易地应用于所有 get 变量,因为它们不会从表单级别注入数据库。
但是,我不确定如何处理所有帖子变量。如果它不是来自数据库,那么如果它是原始输入数据,则完全需要转义。但我正在使用 PDO 准备/执行来转义所有变量。现在的问题:
- 在 select 和 insert 语句中都使用 PDO 的准备/执行是否可以?不是两次转义变量吗?
- 假设我通过 PDO exeute 语句得到了一些变量 - 是否可以简单地使用 $_POST['variable'] 显示这个变量而不转义它(如果它已经在 PDO 函数中完成)?
- htmlspecialchars() 是否足以逃避诸如 GET 变量之类的不是来自数据库的东西?
最重要的是——所有这些、PDO 准备/执行和 htmlspecialchars() 是否足以阻止所有 XSS 攻击?还是我也应该做更多?如果是这样,这应该是什么?从输入中删除所有 html 标签?改用 BB 码?