3

以这种方式调用__construct()登录或注册课程是否安全:

function __construct(PDO $DBH, $_POST['1'], $_POST['2'])
{
    $this->_user=$_POST['1'];
    $this->_pass=$_POST['2'];
    $this->_DBH=$DBH;
}

我想稍后在这个类中清理用户输入,我不确定我的代码是否适合 SQL 注入或 XSS,因为类是用原始 POST 输入构建的?

4

5 回答 5

5

如果您知道您清理/使用准备好的语句(即原始 POST 数据未按原样插入到查询中),则可以这样做。

事实上,如果你使用准备好的语句,你根本不需要清理你的输入(对于 SQL,如果你要将数据显示为 HTML,它仍然需要这样清理)。

于 2012-08-28T15:08:25.320 回答
4

将未经清理的数据从一个变量复制到另一个变量不会产生任何影响。这不是 SQL 注入/XSS 的意义所在。

这是关于在使用这些变量时应用适当的转义(或者更确切地说,避免不转义)。只需使用准备好的语句,就可以大大降低 SQL 注入的风险;不过,转义输出以防止 XSS 仍然是必要的 :)

于 2012-08-28T15:12:56.517 回答
1

不解析用户输入绝不是一个好主意。每当用户输入内容时,您都应该检查输入。

于 2012-08-28T15:09:51.073 回答
1

我总是htmlentities($value, ENT_QUOTES);,只是为了安全起见。

使用准备好的语句,永远不要相信用户输入。

于 2012-08-28T15:10:42.650 回答
1

这不是您应该担心注入攻击的地方。SQL 注入预防通常需要大量的清理输入;XSS 预防通常相当于各种形式的输出编码。这些都不一定与数据的内部表示(变量本身的值)相关。

正如其他人所提到的,使用准备好的语句(PDOPDOStatement)将自动执行必要的 SQL 注入转义。但最终,由于适当的转换会根据您使用数据的方式而有所不同,因此您通常应该在使用时进行这种缓解

于 2012-08-28T15:11:08.327 回答