0

ajaxを介してコードを挿入したり、情報を偽造したりする方法はありますか?

私のウェブサイトからajaxを使用する別のウェブサイトにAjaxを送信したいですか?

もしそうなら、どうすればこれを防ぐことができ、自分のWebサイトからのみajaxを送信できますか?

4

1 に答える 1

2

おそらく、CSRF (クロスサイト リクエスト フォージェリ) 保護を探しているでしょう。問題は、あなたのサイトが AJAX リクエストがどこから来ているのか分からないことです。一般的に受け入れられている解決策は、AJAX 要求と共に送信する必要があるサイトから送信されるトークンを作成することです。

このトークンは、ユーザー セッションに固有であり、ページの HTML のどこかに出力されます。これにより、他のサイトがこのトークンを取得することが困難になります。

基本的なアイデアを提供するには、次のようにします。

$_SESSION['csrf_token'] = md5(uniqid(rand(), TRUE));

次に、たとえばこれを JavaScript 変数として出力できます

<script>
window.CSRF_TOKEN = '<?php echo $_SESSION['csrf_token']; ?>';
</script>

jQueryを使用している場合はajaxSend()、各リクエストにトークンを追加するために使用できます

$.ajaxSend(e, jqXHR, settings) {
  if (!settings.data) settings.data = {};
  settings.data['csrf_token'] = window.CSRF_TOKEN;
}

最後に、バックエンドで$_REQUEST['csrf_token'] ==$_SESSION['csrf_token']` をチェックしてリクエストを検証します。可能であれば、これらのトークンを一度だけ使用することをお勧めします。トークンが生成された時間を保存し、妥当な時間枠内で使用されるようにすることも良い考えです。

于 2012-11-10T14:44:24.150 に答える