php mysql pdo 多次_关于PHP,PDO,MySQL:PHP,PDO,MySQL – 多个INSERT易受注入?

本问题已经有最佳答案,请猛点这里访问。

在我的应用程序(PHP)中,我将从API请求~3000行,并使用PDO驱动程序将它们插入MySQL表中。

虽然要插入的数据不是用户输入的,但数据交给我的方式却不在我手中。

因为~3000插件尽可能快地重要,所以我想使用像(?,?,?),(?,?,?),...这样的多个插件。

我想知道多次插入是否会影响MySQL注入的漏洞? 因为我使用PHP代码'构建'查询。

我的'测试'代码是:

class DBCon {

private static $instance = null;

private $db;

private function __construct() {

$this->db = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'root', '');

$this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}

public static function getDB() {

if (self::$instance === null) {

self::$instance = new self();

}

return self::$instance->db;

}

}

function createItems($array) {

$sql = 'INSERT INTO `table`(`text`, `int`, `bool`) VALUES ';

$insertArray = array();

foreach ($array as $arrayItem) {

$sql .= '(';

foreach ($arrayItem as $arrayItemItem) {

array_push($insertArray, $arrayItemItem);

$sql .= '?,';

}

$sql = rtrim($sql, ',');

$sql .= '),';

}

$sql = rtrim($sql, ',');

var_dump($sql);

var_dump($insertArray);

try {

$query = DBCon::getDB()->prepare($sql);

$query->execute($insertArray);

} catch (PDOException $e) {

echo '
query failure';

}

}

$array = array(array('a piece of text',123,0),array('a piece of text',123,0));

createItems($array);

$sql包含:

index.php:36:string 'INSERT INTO `table`(`text`, `int`, `bool`) VALUES (?,?,?),(?,?,?)' (length=65)

$insertArray包含:

index.php:37:

array (size=6)

0 => string 'a piece of text' (length=15)

1 => int 123

2 => int 0

3 => string 'a piece of text' (length=15)

4 => int 123

5 => int 0

顺便说一句,你不应该抓错报道它们。 相反,让PHP来处理它。 换句话说,只是摆脱尝试捕获。

I was wondering whether doing a multiple insert has effect on the vulnerability for a MySQL injection? Because I 'build' the query using PHP code.

那么,在现实生活中我们无法避免手动构建查询,因此可以动态创建一个或两个查询。 在这种情况下,您必须遵循的唯一规则是所有查询部分都必须在脚本中进行硬编码。

只要遵循它,就不可能注射。

在您的情况下,所有查询部分都是硬编码的,因此这段代码是安全的。

好笑,我以为这就是我所说的。

只要这些值由PDO参数化查询处理,那么它将逃避任何尝试的注入。

https://stackoverflow.com/a/134138

如果您不使用PDO,那么您需要确保正确转义所有数据,这是很多工作。

要查看MySQL服务器实际执行了哪些查询,您可以按照以下说明设置常规日志:

https://stackoverflow.com/a/2413308

这不回答问题。

我以为是的。 您正在使用参数化查询,所以你应该没问题。 但是如果你想看看你的查询发生了什么,你可以查看我包含的第二个链接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值