PHP PDO 清理用户输入

Posted

技术标签:

【中文标题】PHP PDO 清理用户输入【英文标题】:PHP PDO clean user input 【发布时间】:2012-10-02 07:26:40 【问题描述】:

我一直在研究清理用户输入的最有效方法。我的应用程序是一个简单的发布请求,用于对用户进行身份验证。在网上看,我可以找到十几种不同的“最佳”方法。很多这些方法使用不推荐使用的 php 函数或看起来过于复杂。为了连接到我的 sql 数据库,我使用 PDO 类。

在搜索我自己的函数时,我偶然发现了这个:

带有绑定参数的预处理语句不仅更便携、更方便、不受 SQL 注入的影响,而且执行起来通常比插值查询快得多,因为服务器端和客户端都可以缓存查询的编译形式。

我已经使用 prepare 方法来创建我的语句。这是否意味着我可以安全地抵御 SQL 注入攻击?我还应该担心什么?

【问题讨论】:

【参考方案1】:

如果您通过预准备语句将所有用户数据与 PDO 绑定,您应该可以避免注入。您放入 SQL 语句中的任何未绑定的变量(如排序顺序)都是攻击的开放向量。

【讨论】:

【参考方案2】:

@Ray 已经回答了问题的第一部分。 对于第二部分,由于您正在验证您的用户,您还应该担心如何存储他们的密码,使用一些单向加密哈希和盐。并检查使用原始盐从用户输入的密码再次计算哈希是否与数据库条目匹配。如果可能,也可以使用 https 进行身份验证步骤。

【讨论】:

感谢 xception。目前我正在使用非统一的盐渍哈希。计算哈希后,我将盐附加到它并将其存储在数据库中。当用户进行身份验证时,我从数据库中获取盐并将其与提供的密码结合使用,以计算身份验证哈希。我还减慢了哈希函数以阻止暴力攻击。 您可以将失败的身份验证尝试限制在一段时间内,半小时内 10 次失败的身份验证尝试对任何人来说都足够了,并且会严重阻碍任何暴力破解尝试。 Spor la treaba :)

以上是关于PHP PDO 清理用户输入的主要内容,如果未能解决你的问题,请参考以下文章

PHP 清理 SQL DDL 语句的用户输入的方式是啥?

PHP 清理用户输入PHP

PHP 用于清理用户输入的PHP函数

清理用户输入PHP

PHP 清理用户输入

PHP 清理用户输入数据(GET,POST,COOKIE)