清理输入数据会阻止sql注入吗?

时间:2018-07-23 09:28:55

标签: php pdo sanitization bindparam

Well,表和列名不能用PDO中的参数替换。作为一项要求,此处不能提及static column name。因此,我使用santize。是否足以防止像bind param这样的SQL注入。什么是最好的方法?

$id = filter_var($_POST['id'], FILTER_SANITIZE_STRING);
$text = filter_var($_POST['text'], FILTER_SANITIZE_STRING);
$column_name = filter_var($_POST['column_name'], FILTER_SANITIZE_STRING);
$result = $con->query("UPDATE menu SET $column_name='$text' WHERE mid=$id") OR die($con->error);  

1 个答案:

答案 0 :(得分:1)

您可以为语法清除值,而不能为含义清除它。 SQL注入的定义意味着您使查询执行与预期不同的操作。在这里,您可以敞开自己的查询框,以供任何人替换列名,这对查询结构至关重要。通过允许用户更改列,您无法控制查询中哪些列可能会更改,这无疑是SQL注入的一种形式。

您需要一个白名单列名称,允许用户更改。如果允许用户更改 any 列(甚至是主要的id ...!?),而您又不想在数组中保留列名列表,则可以在数据库中查询目标表中的列名称,并将其用作白名单。