以这种方式调用__construct()
登录或注册课程是否安全:
function __construct(PDO $DBH, $_POST['1'], $_POST['2'])
{
$this->_user=$_POST['1'];
$this->_pass=$_POST['2'];
$this->_DBH=$DBH;
}
我想稍后在这个类中清理用户输入,我不确定我的代码是否适合 SQL 注入或 XSS,因为类是用原始 POST 输入构建的?
如果您知道您清理/使用准备好的语句(即原始 POST 数据未按原样插入到查询中),则可以这样做。
事实上,如果你使用准备好的语句,你根本不需要清理你的输入(对于 SQL,如果你要将数据显示为 HTML,它仍然需要这样清理)。
将未经清理的数据从一个变量复制到另一个变量不会产生任何影响。这不是 SQL 注入/XSS 的意义所在。
这是关于在使用这些变量时应用适当的转义(或者更确切地说,避免不转义)。只需使用准备好的语句,就可以大大降低 SQL 注入的风险;不过,转义输出以防止 XSS 仍然是必要的 :)
不解析用户输入绝不是一个好主意。每当用户输入内容时,您都应该检查输入。
我总是htmlentities($value, ENT_QUOTES);
,只是为了安全起见。
使用准备好的语句,永远不要相信用户输入。
这不是您应该担心注入攻击的地方。SQL 注入预防通常需要大量的清理输入;XSS 预防通常相当于各种形式的输出编码。这些都不一定与数据的内部表示(变量本身的值)相关。
正如其他人所提到的,使用准备好的语句(PDO和PDOStatement)将自动执行必要的 SQL 注入转义。但最终,由于适当的转换会根据您使用数据的方式而有所不同,因此您通常应该在使用时进行这种缓解。