gpt4 book ai didi

PHP、PDO、MySQL - 多个 INSERT 易受注入(inject)攻击?

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:09 25 4
gpt4 key购买 nike

<分区>

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

虽然要插入的数据不是用户输入的,但我无法控制数据是如何传递给我的。

因为 ~3000 次插入尽可能快很重要,所以我想使用像这样的多次插入 (?,?,?),(?,?,?),....

我想知道执行多重插入是否对 MySQL 注入(inject)漏洞有影响?因为我使用 PHP 代码“构建”查询。

我的“测试”代码是:

<?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 '<br/><br/>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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com