所以我知道MySQL注入并在将它放入我的数据库之前总是转义我的所有用户输入.但是我想知道,想象一个用户试图提交一个查询注入,我逃避它.如果我稍后从数据库中获取此值并在查询中使用它,该怎么办?我必须再次逃脱吗?
$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);
}
解决方法:
Does MysqL automatically escape their output or something like that, or should I escape in the second query as well?
您还需要在第二个查询中转义. MysqL不会对其输出进行任何转义.
答案很长:MysqL字符串转义不会修改正在插入的字符串,只是确保它不会对当前查询造成任何伤害.任何sql注入尝试仍保留在数据中.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。