2010-12-28 18 views
0

jQueryを使用してユーザー名が使用されているかどうかを確認しています。私の問題は、$.postは何かをエスケープするようです。入力フィールドにユーザ名が"bob"(引用符付き)の場合は大体でページcheck_username.phpjQueryが自動的にAjaxをエスケープしています

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

にユーザ名を送信するために

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

、たとえば、私はこれを使用しますデータからの戻り値は\\\"bob\\\"0になります。 mysql_real_escape_stringがなければ、\"bob\"となります。私はそれを残すことを敢えてすれば、潜在的な攻撃者は簡単に私のアプリケーションにSQLコードを注入することができます。

jQueryのドキュメントでこれを取得して投稿したことがありませんでしたので、これをやめる方法がわかりません。私のajaxにjQueryを使用しないでください。どうすれば修正できますか?

+0

だから、あなたは 'bob'が働いていると言っていますが、誰かが' 'bob ''を入力した場合、それはユーザーの問題ではありませんか? –

+0

ユーザーの問題はどういう意味ですか?ユーザー名に引用符を使用しても問題ありませんが、正しくエスケープしたいと思います。結局のところ、名前で登録したときに '\" bob \ "という名前でログインする必要があったのは残念です。" bob "' –

答えて

3

あなたはPHPが自動的に$ _GET、$ _POST、$ _COOKIEとデータに追加されますstrip outmagic quotesする必要があります。すべてのPHPコードがHTML、SQL、コマンドラインなどに文字列を挿入する前に文字列を適切にエスケープすると無効にすることができます。

+0

それでは、mysql_real_escape_stringを省略し、SQLインジェクションについて心配する必要はありませんか? –

+0

@arxanas:scoatesさんのCyber​​nateの答えに対するコメントを参照してください。これは良いことではありません。 "strip out"としてリンクされた、またはマジッククォートを無効にした "ストリップマジッククォート"コードを使用する方がいいです(サーバー上の*すべての* PHPアプリケーションがそれなしで安全であることが確かであれば後者のことをしてください) 。 – PleaseStand

0

多分maghic_quotes_gpc設定パラメータがPHP.iniファイルでオンに設定されている可能性があります。 そのファイルにアクセスできる場合は、値をoffに変更します。

アクセス権がない場合は、get_magic_quotes_gpc関数を使用して、magic_quotesが「オン」であるかどうかを確認し、そうでない場合はmysql_real_escape_string関数を呼び出します。

+0

MySQLコンテキストで文字列をエスケープするmagic_quotes_gpcを利用する非常に悪いセキュリティ実践です。適切な方法はstripslashes()を呼び出してからmysql_real_escape_string()を呼び出すことです(または、より良い名前付きパラメータ/プリペアドステートメントを使用します)。 – scoates

+0

@scoates必要に応じてmysql_real_escape_stringを使用するget_magic_quotes_gpc関数を使用して言及した箇所を逃したと思います。 OPがphp.iniにアクセスすると、マジッククォートをオフにすることができます。 – Chandu

+0

魔法の引用符が有効で、PHP.iniにアクセスできません。私はget_magic_quotes_gpc()を使ってチェックします。 –

1

$.ajaxprocessDataプロパティを試しましたか?

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

+0

同じ問題があります。これは私の問題を解決しませんでした。引用はまだAJAX中にエスケープされます。 – gibberish

1

ユーザ生成テキストでSQLを直接作成するのは自殺です。理由を理解できない場合は、hereを参照してください。

mysql_real_escape_stringをユーザー定義テキストに適用してSQLを作成すると、クエリを最適化するのが難しくなります(ただし、mysql_real_escape_stringを全く使用しないのと比べて、鋭利な鉛筆で首を刺すような

関連する問題