在开发 PHP 应用程序时,我想到了这种情况:用户在表单中提交某种文本,在服务器端,文本被转义并插入到数据库中。问题是:最后一个查询(使用数据库中的值)中的 SQL 注入是否可能?
示例(我认为我不必解释我的数据库类):
$db->query("INSERT INTO accounts SET test='".$db->escape($_POST["sometext"])."'");
好的,到目前为止我知道什么都不会发生,理论上我也可以用准备好的声明来做到这一点,没有区别。
有时稍后需要在另一个脚本中使用列 test 的值,并且该值需要插入到其他地方。
所以该列被选中,然后被插入。
$db->query("SELECT test FROM accounts WHERE ... LIMIT 1");
$row = $db->fetchRow();
$db->query("INSERT INTO secoundtable SET test='".$row["test"]."'");
如您所见,数据库的值在最后一个 Query 中使用。我必须逃到这里吗?