0

例子:

$user_input = $_POST['input'];
'SELECT '.$user_input.' FROM table_name'

因此,它根据安全(此示例显然不安全)值在数据库中选择一列。这是实用/允许的代码吗?

4

2 回答 2

1

在 SQL 中,您只需将 a 发送string到 DBMS(如 MySQL)。因此,您可以构建任何string您想要的并将其提交给 DBMS。

您只需确保生成的 SQL 查询有效。这意味着例如列存在并且没有出现无效符号。

于 2012-08-08T21:44:00.047 回答
1

从表面上看,这段代码是有效的,假设它$user_input必须是一个有效的列名,这意味着它必须存在并且不能包含任何特殊字符、保留字等(除非它们被转义)。

但是,正如您所说,此代码并不安全,但只要您计划安全地构建查询并使用 PDO 或 MySQLi(不推荐使用的mysql_*函数......),您应该没问题。如果您需要一个不使用已弃用函数的示例(包括mysql_real_escape_string,也已弃用),我将提供一个。

我知道你说过你知道这段代码不安全,但如果你好奇的话,这里有另一个例子。正如评论和这个问题中所讨论的,这个输入:

$user_input = '; DELETE FROM table_name ; *';
'SELECT '.$user_input.' FROM table_name'

将删除表的全部内容table_name。即使此代码引发语法错误,MySQL 仍将继续执行它,从而有效地截断table_name.

于 2012-08-08T21:47:50.820 回答