ajaxを介してコードを挿入したり、情報を偽造したりする方法はありますか?
私のウェブサイトからajaxを使用する別のウェブサイトにAjaxを送信したいですか?
もしそうなら、どうすればこれを防ぐことができ、自分のWebサイトからのみajaxを送信できますか?
ajaxを介してコードを挿入したり、情報を偽造したりする方法はありますか?
私のウェブサイトからajaxを使用する別のウェブサイトにAjaxを送信したいですか?
もしそうなら、どうすればこれを防ぐことができ、自分のWebサイトからのみajaxを送信できますか?
おそらく、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']` をチェックしてリクエストを検証します。可能であれば、これらのトークンを一度だけ使用することをお勧めします。トークンが生成された時間を保存し、妥当な時間枠内で使用されるようにすることも良い考えです。