jQuery escapa automáticamente ajax

Estoy usando jQuery para verificar si se toma un nombre de usuario. Mi problema es que $.post parece escapar de todo. Por ejemplo, uso esto:

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

para enviar el nombre de usuario a la página check_username.php , que es aproximadamente,

 $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; 

Si el nombre de usuario en el campo de entrada es "bob" (con las comillas), el retorno de los datos será \\\"bob\\\"0 . Sin mysql_real_escape_string, lee \"bob\" . Si me atrevo a dejarlo así, los posibles atacantes podrían fácilmente insertar código SQL en mi aplicación.

No he visto nada en la documentación de jQuery en get y post sobre esto, así que no estoy seguro de cómo detener esto. Si no utilizo jQuery para mi ajax, ¿cómo soluciono esto?

Deberá quitar las comillas mágicas que PHP agrega automáticamente a los datos $ _GET, $ _POST y $ _COOKIE. Esa característica desaprobada se puede deshabilitar si todo su código PHP escapa correctamente de las cadenas antes de insertarlas en HTML, SQL, líneas de comandos, etc.

¿Has probado la propiedad processData para $.ajax ?

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

Componer SQL directamente con texto generado por el usuario es suicida. Mira aquí si no entiendes por qué.

Componer SQL con mysql_real_escape_string aplicado al texto generado por el usuario es una mala idea, ya que hace que las consultas sean difíciles de optimizar (aunque en comparación con no usar mysql_real_escape_string es como clavarse en el cuello con un lápiz afilado en comparación con clavarse en el cuello con una motosierra en funcionamiento)

Quizás el parámetro de configuración maghic_quotes_gpc esté activado en el archivo PHP.ini. Si tiene acceso a ese archivo, cambie el valor a apagado.

Si no tiene acceso, use la función get_magic_quotes_gpc para ver si magic_quotes está “on” si no es así, luego llame a la función mysql_real_escape_string, de lo contrario, omita.