jQuery会自动转义ajax

我正在使用jQuery来检查是否采用了用户名。 我的问题是$.post似乎逃脱了任何事情。 例如,我使用这个:

 $.post("http://mywebsite.com/check_username.php", { "username": $("#username_txt").val() }, function(data, textstatus, xmlhttp){ // do stuff }); 

将用户名发送到页面check_username.php ,粗略地说,

 $username = mysql_real_escape_string($_POST["username"]); echo $username; // show the perceived username echo mysql_query("SELECT * FROM users WHERE username=\"".$username."\";") === false ? 1 : 0; 

如果输入字段中的用户名是"bob" (带引号),则数据的返回\\\"bob\\\"0 。 没有mysql_real_escape_string,它会显示\"bob\" 。 如果我敢这样做,那么潜在的攻击者可以轻松地将SQL代码注入到我的应用程序中。

关于get和post的jQuery文档我没有看到任何关于此的内容,所以我不知道如何阻止它。 除非我的ajax不使用jQuery,我该如何解决这个问题?

你必须删除 PHP自动添加到$ _GET,$ _POST和$ _COOKIE数据的神奇引号 。 如果所有PHP代码在将字符串插入HTML,SQL,命令行等之前正确转义字符串,则可以禁用该弃用function。

你试过$.ajaxprocessData属性吗?

http://api.jquery.com/jQuery.ajax/

直接使用用户生成的文本编写SQL是自杀的。 如果你不明白为什么,请看这里 。

使用应用于用户生成的文本的mysql_real_escape_string编写SQL是一个糟糕的想法,因为它使得查询难以优化(尽管与不使用mysql_real_escape_string相比,就像用尖锐的铅笔刺伤自己的脖子而不是在脖子上猛刺自己用电锯运行)

也许maghic_quotes_gpc配置参数在PHP.ini文件中设置为on。 如果您有权访问该文件,请将值更改为off。

如果你没有访问权限,那么使用get_magic_quotes_gpc函数来查看magic_quotes是否为“on”,如果不是,则调用mysql_real_escape_string函数,否则绕过它。