2011-08-27 89 views
0

所以我只是测试了mysql_real_escape();函数,并且它在"之前放置了一个\。当内容回显到页面上时,我只需在"之前获得\'的内容。所以我们假设我发布了"""""""""""""""""""""""""""",我得到的结果是\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"SQL注入帮助

有一些代码删除时,它的回显到页面上的\

+0

您使用'mysql_real_escape_string()'当你即将把字符串到数据库中。当您从数据库中读取字符串时,它们将被转义。很显然,如果你只是'echo mysql_real_escape_string($ my_string))'',你会得到你所看到的效果。 –

+1

如何将数据插入数据库?如果您正在执行手动构建的INSERT查询,则需要'mysql_real_escape_string()'。如果您正在使用准备好的语句(传递值作为参数插入),那么不要。请粘贴一个行为不正确的最小代码示例。 – Crack

回答

5

通过添加那些斜线,只是mysql_real_escape_string转换串入数据库的输入格式。当数据从数据库中传出时,它应该没有任何斜杠出现。你不应该自己去除它们。

使用stripslashes与其他人一样,建议在大多数情况下会做与mysql_real_escape_string相反的操作,但不是全部,而且您不应该为此目的而依赖它。请注意,如果你发现自己需要使用它,那么你已经做了一些其他的错误。

+0

+1准确!这个结果指向双重编码 – Andomar

+0

$ text_share_body = $ _POST ['text_share_body']; $ text_share_body = mysql_real_escape_string($ text_share_body); – frankmeacey

+0

它进入'“的前用“\” S上的数据库,但它并不全自动撤消斜杠上输出 – frankmeacey

2

你不需要unescape,即。删除斜线 - 它们不会插入到数据库中。它们仅用于将数据传递给MySQL,它们不会写入数据库。当你SELECT的数据,你不会看到斜杠。

1

你知道如何mysql_real_escape()作品。提示:它允许为SQL使用编码字符串。例如mysql_query('SELECT * FROM users WHERE name="'.mysql_real_escape_string($name).'"');。它可以用来插入不会引用引号的字符串,例如" or 1=1 -- "制作为SELECT * FROM users WHERE name="" or 1=1。你必须在之前激活它插入它的数据库。

当你将读取该数据,斜线将不以任何方式存在。

其实,看着下面是什么,我会做出这样的回答,不作评论...