例子:
$user_input = $_POST['input'];
'SELECT '.$user_input.' FROM table_name'
因此,它根据安全(此示例显然不安全)值在数据库中选择一列。这是实用/允许的代码吗?
在 SQL 中,您只需将 a 发送string
到 DBMS(如 MySQL)。因此,您可以构建任何string
您想要的并将其提交给 DBMS。
您只需确保生成的 SQL 查询有效。这意味着例如列存在并且没有出现无效符号。
从表面上看,这段代码是有效的,假设它$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
.