私は現在、Facebookの認証を使用してウェブサイトを構築しています。私はローカルで稼働しており、CSRFエラーを継続しています。私は彼らのCSRF保護メカニズムを理解しようとしています:Facebookの認証とCSRFのメカニズム
$code = $_REQUEST["code"];
$_SESSION['state']= $_REQUEST['state'];//GETS SITE WORKING BUT UNSAFE!!!///
if(empty($code)) {
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
$dialog_url = "http://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
. $_SESSION['state'];
echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
if($_REQUEST['state'] == $_SESSION['state']) {
は何が起こることは、それが設定されている私の$ _REQUEST [「状態を」]ようだが、私の$ _SESSION [「状態は」]はないということです。したがって、それを働かせるために私は両方を等しく設定する線を持っています。私の$ code変数は決して空ではないようですので、新しい$ _SESSION ['state'変数は設定されません。
まず、$ _REQUEST ['code']の役割は何ですか?/ thisは/ /この変数は/ setから来ていますか?
私の安全でないコード行でこの問題を解決する方法はありますか?
p.s私はFB sdkを使うべきだと知っていますが、Webデザイン/セキュリティを学んでいますので、これはどのように動作するかを学ぶのには良い練習です!
多くのおかげで興味を持っている誰にもサム
は、私はそれがどのように動作するか出てきましたが、それでも私の問題を修正していない...とにかく
CSFR保護システムがで働きます$ _SESSION ['state']のサーバ側にState IDを保存すると、$ _REQUEST ['state']の内部にも同じIDが保存されます。したがって、CSRF攻撃が発生した場合、CSRF攻撃(クライアント側)の状態値は$ _SESSION ['state']の状態値と一致せず、コードは進行せず、攻撃は阻止されます。
私が間違っている場合は、私を修正してください!
はい、私の$ _SESSIONsが正常に動作していないことがわかりました。私の他のユーザーページを統合しました。クッキーが正常に動作していないようですが、これを修正しても問題は解決しません。私はちょうどローカルサーバ上でそれを実行するの厄介さにこれを置いている! –
セッションがそれ以外のところでは動作しているが、ここで問題を起こしている場合、この1つの目的のために時間を過ごすのは時間がかかりすぎるかもしれません。私はあなたが考えるかもしれないいくつかの他のオプションで私の答えを少し編集しました。 –