如何在提交到数据库之前阻止Php中的mysql注入

H B*_*amy 0 php mysql database sql-injection

可能重复:
在PHP中停止SQL注入的最佳方法

最近,我通过黑客DROP table通过注册表单插入命令来清除我的数据库.

这让我恼火,让我想到:

将信息发送到数据库之前,如何在php中阻止mysql注入,例如,有没有办法检测用户是否正在尝试将错误代码注入可以擦除它的数据库中,如果是,则检测并显示一个错误?

另外,有没有办法在添加检测mysql注入,所以当我显示查询时,如果它是删除注入代码,则不显示它.

再次感谢,我为任何华夫饼道歉.

nsa*_*ers 8

使用PDOMysqli与绑定语法.仅这一点就可以防止大多数注射攻击

例:

    $stmt = $db->prepare(
                'UPDATE users ' .
                'SET userEmail=:email, userSalt=:salt, userPass=:pass ' .
                'WHERE userId=:userId LIMIT 1' );
    $stmt->bindParam( ':email',  $this->_email,    \PDO::PARAM_STR );
    $stmt->bindParam( ':salt',   $this->_salt,     \PDO::PARAM_STR );
    $stmt->bindParam( ':pass',   $this->_password, \PDO::PARAM_STR );
    $stmt->bindParam( ':userId', $this->_id,       \PDO::PARAM_INT );
    $stmt->execute();
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,尝试转义:email绑定以插入a DROP TABLE将无法正常工作.

您仍需要小心用户提供的数据.举例来说,如果用户提供了$docId一个get document查询,确保他们授权给被请求的文档.(而不仅仅是猜测$docId属于其他用户).

  • +1抵制提及Bobby Tables的冲动:) (4认同)