0

我正在重新编码我网站上的所有 sql 语句以使用 PDO 和准备好的语句。我已尽力了解 SQL 注入的工作原理,所以我有一个问题。

如果我有一个页面说 viewitems.php 该页面将查询数据库并从表中提取所有数据并将其全部显示在页面上。由于用户没有任何输入可以注入吗?我知道可以注入使用带有标题变量的数据向下钻取的页面,因为用户可能会弄​​乱标题,但是如果将 SQL 编码到页面中而无需任何外部变量,是否可以注入?

4

2 回答 2

3

我正在重新编码我网站上的所有 sql 语句以使用 PDO 和准备好的语句。

太棒了。

由于用户没有任何输入可以注入吗?如果将 SQL 编码到页面中而无需任何外部变量,是否可以注入?

如果 SQL 语句中没有运行时变量,则不存在,该语句不易受到 SQL 注入攻击。在这种情况下使用准备好的语句仍然没有害处。出于多种原因,这样做甚至可能是有益的:

  • 与其他确实需要使用准备好的语句的代码保持一致(为了安全)
  • 如果/当您确实需要查询中的参数时,面向未来
  • 查询缓存(尽管这取决于您的特定数据库和/或驱动程序;请参阅12
于 2013-02-23T20:05:46.203 回答
0

可以注入 SELECT 语句吗?

一般情况下是
的。

但是,如果将 SQL 编码到没有变量的页面中,那么当然不可能没有注入,因为没有任何东西可以注入。

但是,如果将 SQL 编码到页面中并注入了一些变量,尽管是“非外部的”,那么二阶注入是很有可能的。
这就是为什么如果总是使用准备好的语句可以做任何事情,没有例外。

于 2013-02-23T20:07:38.040 回答