Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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_Pdo_Sql Injection - Fatal编程技术网

Php 通过添加第二个查询,SQL注入实际上是可能的吗?

Php 通过添加第二个查询,SQL注入实际上是可能的吗?,php,mysql,sql,pdo,sql-injection,Php,Mysql,Sql,Pdo,Sql Injection,这里有很多关于SQL注入的警告,但我发现没有人不回答,它是如何发生的?在这个问题中,我假设它是MySQL和PHP 基本的mysql不接受查询中的第二个查询,对吗 所以,基本上,这个 $unsafe = "');DROP TABLE table;--"; mysqli_query($con,"INSERT INTO table (Column) VALUES ('$unsafe'"); 实际上没有做任何有害的事情?请纠正我这一点 我没有使用mysqli的经验,所以我将跳到PDO和“准备好

这里有很多关于SQL注入的警告,但我发现没有人不回答,它是如何发生的?在这个问题中,我假设它是MySQL和PHP

基本的mysql不接受查询中的第二个查询,对吗

所以,基本上,这个

$unsafe = "');DROP TABLE table;--";    
mysqli_query($con,"INSERT INTO table (Column) VALUES ('$unsafe'");
实际上没有做任何有害的事情?请纠正我这一点

我没有使用mysqli的经验,所以我将跳到PDO和“准备好的语句”

当我开始使用PDO时,我缺乏关于它的信息,基本上是这样使用的,认为它是安全的

$stm = $pdo->prepare("INSERT INTO table (Column) VALUES ('$unsafe');
$stm->execute();
但是,PDO与mysql的情况相同。它不支持开箱即用的多个查询,对吗?再说一遍,请纠正我的错误

那么,如果我没有错的话,这被认为是安全的

$stm = $pdo->prepare("INSERT INTO table (Column) VALUES (?);
$stm->execute(array($unsafe);
如果不支持多个查询,没有数据库访问权限的恶意用户如何注入恶意数据?

还是他们

如果甚至不支持多个查询,那么无法访问数据库的恶意用户如何注入恶意数据

“SQL注入”不等于“第二次查询”

还是他们

当然是的

第二个查询只是一个示例。而它可以是任何有效的SQL语句。SQl注入是对格式不正确的查询的攻击。如果开发人员没有正确格式化SQL,就有可能打破文字的限制,向SQL主体添加代码

通过添加第二个查询,SQL注入实际上是可能的吗

是的,这取决于您使用的API。

使用mysql+php进行两次查询是错误的

资料来源:

如果没有经过深思熟虑的步骤,这将不适用于mysql和php,因为它只执行第一个查询

这并不意味着这是不可能的,只是它应该是当它是

SQL注入非常真实 但就sql注入而言,上述内容几乎毫无意义。有大量的信息,包括。以问题中的示例为例,这是一种等效的攻击,它可以工作:

i、 e.找到一个接口来删除我自己的,例如注释,如果id没有转义,那么删除所有注释将是微不足道的。但这个例子只是冰山一角

可以利用执行任意sql语句 问题中的该代码:

$stm = $pdo->prepare("INSERT INTO table (Column) VALUES ('$unsafe')");
$stm->execute();
没有使用PDO的任何好处,也就是说,任何能够与mysql/mysqli驱动程序一起工作的漏洞(真正大量的漏洞)都会与以这种方式使用的PDO一起工作

参数化查询可防止sql注入 使用with parameters可适当地转义值以防止sql注入攻击,因此,是的,这是安全的:

$stm = $pdo->prepare("INSERT INTO table (Column) VALUES (?)");
$stm->execute(array($unsafe));
无法访问数据库的恶意用户如何注入恶意数据 只需找到一种执行sql的方法,该方法要么做他们想做的事情,要么给他们信息,让他们以不同的方式来做

例如:

function login() {
    $username = "irrelevant' OR is_admin = 1 --";
    $password = hash('irrelevant');
    $query = "SELECT id from users where username = '$username' AND password = '$password'";
    ...
}
恶意用户如何在不考虑注入的情况下访问系统上的管理功能?很容易


有关注入的一般信息,请参阅前面的参考资料。

这是@FreshPrinceOfSO的一个问题,您可以随意将其标记为迁移。您的示例的可能重复不会产生有效的SQLIt。不仅仅是多个查询,正如您已经研究过的那样,这些查询确实根据默认设置被禁用。在您的INSERT请求中,攻击者可能只需要在
$safe
中使用精心编制的字符串连接表达式和SELECT子查询就可以公开数据库内容。是的,我知道这一点。虽然解释得相当仔细,但它仍然只是一个查询,完全有效的SQL。但是,如果用户想在它之后添加另一个查询,比如在我的示例中,该怎么办呢?我已经编辑了标题,以实际匹配问题。因此,通过任何必要的方式,是否有可能在第一个查询之后添加另一个查询?是的,但实际上并不重要。你问错了问题。那么子问题:PDO默认支持它吗?是的,在这种情况下:但是如果没有
try
catch
,try&catch与这个问题有什么关系?你很明白你在问什么吗?谢谢你!:)+一百万。
function login() {
    $username = "irrelevant' OR is_admin = 1 --";
    $password = hash('irrelevant');
    $query = "SELECT id from users where username = '$username' AND password = '$password'";
    ...
}