【发布时间】:2011-11-18 11:49:56
【问题描述】:
所以我知道 MySQL 注入,并且总是在将所有用户输入放入我的数据库之前对其进行转义。但是我想知道,想象一个用户试图提交一个要注入的查询,而我却逃避了它。如果我稍后从数据库中获取这个值,并在查询中使用它会怎样。我必须再次逃脱吗?
所以:(sql::escape() 包含我的转义函数)
$userinput = "'); DROP `table` --";
mysql_query("INSERT INTO `table`
(`foo`,`bar`)
VALUES
('foobar','".sql::escape($userinput)."')");
// insert php/mysql to fetch `table`.`bar` into $output here
mysql_query("INSERT INTO `table2`
(`foo`,`bar`)
VALUES
('foobar','".$output."')");
MySQL 是否会自动转义它们的输出或类似的东西,还是我也应该在第二个查询中转义?
这是一个测试用例,但这在我的程序中以其他方式发生,我想知道这种情况的安全性必须有多严格。
编辑
我的逃生函数
static function escape($string){
if(get_magic_quotes_gpc())
$string = stripslashes($string);
return mysql_real_escape_string($string);
}
【问题讨论】:
-
+1 表示在谈论 SQL 注入攻击时很少解决的一个非常好的问题。
标签: php mysql escaping sql-injection user-input