是否有一个SQL注入方法列表,仅使用带有utf8编码的mysql_real_escape_string();
无法保护?
对于整数,我正在使用intval();
它足够安全吗?
对于那些认为我想要“教程”来攻击任何人的人:不,我不会。我只是想知道如何使我的应用程序更安全,我想知道他们是否有99%的安全保护黑客
答案 0 :(得分:3)
如果给定有效的数据库连接,mysql_real_escape_string()
在所有情况下都应该是安全的字符串数据(this answer中描述的罕见例外)。
然而,字符串之外的任何东西,它都不会逃脱:
$id = mysql_real_escape_string($_GET["id"]);
mysql_query("SELECT * FROM table WHERE id = $id");
仍然容易受到攻击,因为您不必“突破”字符串来添加邪恶的附加命令。
答案 1 :(得分:1)
sql注入方法不多。他们总是由于输入没有被消毒和正确逃脱。因此,虽然mysql_real_escape_string()
将使任何字符串安全地包含在数据库查询中,但您应遵循以下规避技术来保护您的数据和用户免受SQL注入。
is_numeric()
验证数据,或使用settype()
静默更改其类型mysql_real_escape_string()
将使所有字符串都安全地包含在对mysql数据库的SQL查询中另请参阅:SQL注入的PHP page
答案 2 :(得分:0)
有许多内容可能无法通过标准方法(例如字符串转义,int转换)受到保护,这也取决于您使用的软件版本。例如,utf-8本身就是一个问题,作为一个很小的例子(在众多中)你应该确保请求是有效的utf-8(或将其转换为utf-8)。请参阅example。
作为网站的不死行为,我认为MySQL注入保护不能被压缩成单个SO答案,因此我将这些链接作为一般起点。