mysql - 使用动态加载的表和数据库名称避免查询中的 SQL 注入(inject)

标签 mysql pdo prepared-statement sql-injection code-injection

我正在开发一个系统,以非常简单的方式管理数据库中的一些表。

系统首先使用 Ajax 加载用户可以查看和管理的数据库。然后加载该数据库中的表,然后加载该表的数据。

我有这样的东西:

$.ajax({
    url : "myUrl.php",
    data : {
        db : $dbSelector.val(),
        table : tableToLoad
    },
    success : function (json) { /* Some cool stuff here */ }
});

而且我发现当参数是数据库名称、表或列时不能使用参数化查询,所以我不能这样做:

<?php
$query = "SELECT * FROM :db.:table";
$st = $pdo->prepare($query);
$st->execute(
    array(
        "db"=>$db, 
        "table" => $table
    )
);
$rows = $st->fetchAll(PDO::FETCH_OBJ);

我无法使用 mysql_ 或 mysqli_ 过滤,因为我们没有安装它。

最佳答案

您可以使用:

$db = substr($dbh->quote($db), 1, -1);

或者只是删除所有非字母数字字符:

$db = preg_replace('/\W/', '', $db);

关于mysql - 使用动态加载的表和数据库名称避免查询中的 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16445791/

相关文章:

php - 已安装 Postgres.app pdo_pgsql pgsql 但 php 找不到模块。苹果操作系统

php - Laravel DB::statement CREATE DATABASE 无法添加参数(准备语句?)

c# - 检查表是否存在的最干净的方法 - MySQL

php - 如何使用php函数unlink从服务器删除图像?

mysql - 如何对数组中的特定字段进行分组?

PHP MYSQL 查询多个表,其中第二个表返回多行

php - mysql_field_name 等效 pdo

java - 检测 UPDATE 语句中哪些 SQL 列发生了更改

php - Wordpress 可以用来创建与预先存在的 php 文件和数据库相关的网页吗?

mysql - 使用 SQL 计算方差