Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 没有用户交互,我仍然可以得到SQL注入_Php_Mysql_Sql Injection - Fatal编程技术网

Php 没有用户交互,我仍然可以得到SQL注入

Php 没有用户交互,我仍然可以得到SQL注入,php,mysql,sql-injection,Php,Mysql,Sql Injection,我的页面只显示DB表中的数据,php页面只显示信息,没有任何按钮、链接、下拉菜单或表单 我使用的是旧的mysql,而不是mysqli或PDO的语法 我还能得到SQl注入攻击吗?这取决于查询源。如果SQL查询的任何部分来自用户输入(换句话说,如果整个查询字符串不是字符串常量),那么您就不安全 例如: SELECT * FROM USERS ; SELECT * FROM myTable WHERE id = 5; 是安全的,但是 SELECT * FROM myTable WHERE id =

我的页面只显示DB表中的数据,php页面只显示信息,没有任何按钮、链接、下拉菜单或表单

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


我还能得到SQl注入攻击吗?

这取决于查询源。如果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注入安全的唯一经验证的方法。

这完全取决于查询源。如果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注入安全的唯一经验证的方法。

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


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

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


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

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

如果应用程序向您展示一个漂亮的文本框,并将其内容粘贴到SQL查询中,那么这是最简单的,但也可以通过其他方式实现


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

SQL注入的工作原理是将字符串注入正在执行的SQL中

如果应用程序向您展示一个漂亮的文本框,并将其内容粘贴到SQL查询中,那么这是最简单的,但也可以通过其他方式实现


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

如果查询独立于请求,则您是安全的。请注意,这意味着用户非常有创造力。您可能对您不知道的用户数据有一些依赖性。例如,这样的脚本可能会被破坏:

$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$sql = "SELECT * FROM entities WHERE id = 7 and locale = '$locale'";
免责声明:我不知道
Locale::acceptFromHttp()
是否进行了一些验证。让我们假设在这篇文章的上下文中没有


我不想说,如果没有它,就不可能编写安全的代码。o使用它们确实没有什么坏处。

如果查询独立于请求,则您是安全的。请注意,这意味着用户非常有创造力。您可能对您不知道的用户数据有一些依赖性。例如,这样的脚本可能会被破坏:

$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$sql = "SELECT * FROM entities WHERE id = 7 and locale = '$locale'";
免责声明:我不知道
Locale::acceptFromHttp()
是否进行了一些验证。让我们假设在这篇文章的上下文中没有

我不想说,如果没有它,就不可能编写安全的代码。o使用它们确实没有什么坏处。

如果在SQL语句中使用用户可控制的数据而没有进行适当的处理,则会发生:

软件使用来自上游组件的外部影响输入构建SQL命令的全部或部分,但不会中和或错误地中和特殊元素,这些元素在发送到下游组件时可能会修改预期的SQL命令

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

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

相反,这意味着如果SQL查询不包含任何用户可控制的数据,即。e、 ,查询在代码中是固定的,不受任何可变输入的影响,不易受到SQL注入的影响。

如果在SQL语句中使用用户可控制的数据而未进行适当处理,则会发生:

软件使用来自上游组件的外部影响输入构建SQL命令的全部或部分,但不会中和或错误地中和特殊元素,这些元素在发送到下游组件时可能会修改预期的SQL命令

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

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

相反,这意味着如果SQL查询不包含任何用户可控制的数据,即。e、 ,查询在代码中是固定的,不受任何可变输入的影响,不易受到SQL注入的攻击

我有一些页面只显示DB表中的数据,php页面只显示它们没有显示的信息