【发布时间】:2014-02-16 08:03:46
【问题描述】:
我是网络安全领域的专家,已经研究了两天。根据 OWSAP,SQL 注入和 XSS 攻击是 Internet 上最常见的攻击,至少每个程序员都必须处理。
所以我理解的保护它们的内容如下(如果我错了,请您更正或添加):
Use PDO and prepared statements to prevent SQL Injection
PDO 和预处理语句足以防止(一阶)SQL 注入,我们不需要在驱动程序处理时对输入数据进行任何转义。
但是这可能会导致您容易发生二阶 SQL 注入 (see this for more),其中像 ' OR '1'=' 这样的数据可能会在通过 PDO 和准备好的语句存储后存储到数据库中原始数据并防止这种情况让我觉得首先要转义字符串,因此
use $pdo->quote($string) before passing it to prepared statement for storage
但由于我还想防止 XSS 攻击,我也应该使用htmlentities()(或htmlspecialchars(),在最小情况下)。我应该在输出端执行此操作,但如果我的输出端我可能更喜欢在输入端使用仅针对 HTML
总而言之,我的步骤是
$string ='raw input from user';
$escaped_string=$pdo->quote(htmlentities($string));
$pdo->execute('query to store $escaped_string into the database');
输出时
只需从数据库中回显存储的字段。
我想知道我的方法是否安全?
【问题讨论】:
-
这是一个问题吗..?
-
是的,我想知道我的方法是否安全?
-
@InsaneCoder 你的方法是一团糟......我在任何地方的代码中一次又一次地看到一个常见的错误。有关一些信息,请参阅我的回答,如果您对此有任何疑问,请具体询问。
标签: php security pdo xss sql-injection