【发布时间】:2014-10-01 14:28:39
【问题描述】:
问题在标题中,但代码示例如下:
HTML:
<form name="input" action="demo_form_action.asp" method="post">
Username: <input type="text" name="user">
<input type="submit" value="Submit">
</form>
PHP:
$data['userName'] = $_POST['user'];
$query = "INSERT INTO Persons (value1) VALUES ('$data['userName']')";
mysqli_query($con,$query);
所以基本上我用输入填充数组的一部分,然后将该值放入某个数据库表中。为了澄清我正在使用 Drupal 7 - 稍后在代码中完成:
node_save($data);
但这似乎只是将字符串复制到数据库中。我对 Drupal 7 将如何处理这个问题感兴趣,但也在自定义环境中询问:
如果从表单传递的变量不用作 SQL 查询的一部分,而只是作为字符串写入数据库,是否仍有可能受到 SQL 注入攻击?
当然 - 这不包括在以后读取字符串,然后将其用作查询的一部分。在写完所有这些之后,我认为 - 无论如何都必须使用查询插入字符串,因此只要攻击者知道所使用查询的格式,他们就能够编写一个字符串来操纵它以执行注入攻击(当然,没有任何数据清理)...对不起,如果最初的问题听起来很愚蠢 - 我没有做这么久,只是想我会把它扔在那里。
谢谢,非常感谢!
【问题讨论】:
-
'; DROP TABLE Persons; # -
您正在将“外部”数据填充到字符串中,这意味着 PHP 会将数据本身转换为字符串。根据定义,填充到查询字符串中的 ANY 数据可用作注入攻击向量。它可能不实用,可能不容易,但如果它来自外部,则必须将其视为剧毒废物。这也意味着您自己创建的任何数据也可能导致注入攻击。