没有用户交互性我仍然可以获得SQL注入

时间:2014-03-03 16:43:12

标签: mysql pdo mysqli sql-injection

我的页面只显示来自数据库表的数据,php页面只显示他们没有任何按钮,链接,下拉菜单或表单的信息。

我使用旧的mysql而不是mysqli或PDO语法

我还可以获得SQl注入黑客吗?

6 个答案:

答案 0 :(得分:1)

这一切都取决于查询源。如果您的SQL查询的任何部分来自用户输入(换句话说;如果不是您的整个查询字符串是一个字符串常量),那么您就不安全了。

例如:

SELECT * FROM USERS ;
SELECT * FROM myTable WHERE id = 5;

是安全的,但

SELECT * FROM myTable WHERE id = (some variable derived from user input like querystring or post-form)

绝对 没有。

你应该使用

SELECT * FROM myTable WHERE id = @0 

最高安全性的语法。这是唯一一种保证SQL注入安全的方法。

答案 1 :(得分:1)

为了使SQL注入工作,他们需要一种方法将SQL代码发送到您的服务器,因为没有输入,理论上他们不可能注入SQL。 (虽然我不是这个主题的专家)

我仍然建议你使用像mysqli或PDO这样的框架,你应该熟悉这些框架,因为它们已成为网站设计的常态。

答案 2 :(得分:1)

如果查询独立于请求,那么您就是安全的。请注意,卑鄙的用户非常有创意。您可能对您不了解的用户数据有一些依赖性。例如。像这样的脚本可能会被破坏:

$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$sql = "SELECT * FROM entities WHERE id = 7 and locale = '$locale'";

免责声明:我不知道Locale::acceptFromHttp()是否进行了某些验证。让我们假设这篇文章的背景不是。

我不想说在没有prepared statements的情况下编写安全代码是不可能的。 OTOH使用它们确实没有伤害。

答案 3 :(得分:0)

SQL注入通过将字符串注入到您正在执行的SQL中来工作。

如果应用程序为您提供了一个很好的文本框,其内容会粘合到SQL查询中,这是最简单的,但也可以通过其他方式。

例如,如果您的报告应用程序使用任何类型的HTTP请求来显示数据,则攻击者可以使用WGET来欺骗请求并注入SQL。例如,如果您的报告的网址格式为http://myserver/report.php?month=february,而您使用february来构建SQL查询,则您很容易受到攻击。

答案 4 :(得分:0)

如果在没有正确处理的情况下在SQL语句中使用用户可控数据,则会出现

SQL injection

  

该软件使用来自上游组件的外部影响输入构造全部或部分SQL命令,但它不会中和或不正确地中和可能在发送到下游组件时修改预期SQL命令的特殊元素。 / p>      

如果没有在用户可控输入中充分删除或引用SQL语法,生成的SQL查询可能会导致这些输入被解释为SQL而不是普通用户数据。

请注意,用户可控制的数据包括任何数据,这些数据可能会受到用户请求的直接或间接影响。

相反,这意味着如果您的SQL查询不包含任何用户可控数据,i。例如,查询在代码中是固定的,不受任何可变输入的影响,它不容易受到SQL注入的攻击。<​​/ p>

答案 5 :(得分:0)

  

我的页面只显示来自数据库表的数据,php页面只显示他们没有任何按钮,链接,下拉菜单或表单的信息。

我敢说这样的设置只是不可能

使用来自数据库的php脚本提供的动态网页的想法是使用相同的脚本在数据库中显示不同的内容。< / p>

所以 - 你确实只有一组静态页面(我怀疑) - 你不需要PHP /数据库 - 只需静态HTML即可。

或者 - 很可能 - 您有动态页面根据某种用户输入显示内容 - 因此非常容易受到攻击。