2016-12-25 17 views
1

私は私の問題をGoogleにしようとしましたが、私の質問に正確には分かりません。ユーザーが自分のサイトで特定のイベントを実行すると、 mysqlデータベース内の他のユーザーのクレジット:このajaxからphpスクリプトを呼び出す

function incrasecredit(){ 
    $.ajax({ 
    type: "POST", 
    url: "/increasecredit.php", 
    data: {}, 
    success: function(html) { 
    } 
    }); 
    } 

...簡単です。問題は(このスクリプト名が示すように)このイベントが "クレジットシステム"/moneyに接続されていることです。だから私はそれが安全でなければならないと思う。 "/increasecredit.php"には他の方法でアクセスしないでください。例えば。単にブラウザ経由で実行するだけです。この特別なケースでのみ、私はjqueryのスクリプトでそれを呼び出す。より正確には、ユーザーがiframeをクリックしたときにincrasecredit()を実行する必要があります。そして、この場合のみ。このスクリプトを間違った方法で実行しないようにするにはどうすればよいですか?私はトークンでそれを解決しようとしましたが、まだそれを把握していませんでした。私はもっ​​と大きな写真を撮っていないと感じています。前もって感謝します。

+4

あなたは何らかのユーザー認証を使用していますか? これを行うより良い方法は、ajaxリクエスト(他のフロントエンド検証と同様)が単に「なりすまし」になる可能性があるため、increasecredit.phpスクリプトのチェックを行うことです。 – flynorc

+0

はい、ユーザー認証はセッション単位で行われます。しかし、ユーザーが他のユーザーのエントリのクレジット値を引き上げる権限を持っているかどうかを確認するにはどうすればよいですか? – tyler

+1

あなた自身のシステムです。あなたは知ってはいけませんか?トランザクションの制約は何ですか?彼らが想定しているよりも頻繁にこれを行うのはユーザーの関心事ですか? –

答えて

3

あなたのページにCSRFトークンを実装して、正規のメカニズムを介してリクエストがあなたのウェブサイトから発信されていることを確認する必要があります。これは、ユーザーセッションクッキーに格納されたトークンと一致する必要があるPOST要求と共に渡される1回のみのトークンを持つことにまで沸きます。このトークンは、しばらくしてから自動的に期限切れになります。

さらに、バックエンドは、トランザクションを承認するために何らかのACLを実装する必要があります。ユーザーの役割は、認証されたユーザーのセッションを通じて確認できます。

+0

さて、これはすでに私を助けてくれました。それは100%持っていませんでした。私はこれをまっすぐにしてみましょう:ユーザーセッションに格納されているセッションが作成されたらトークンを作成します。私は私のアヤックスコールを実行するときにも私のトークンを送信します。 PHPは、送信されたトークンがセッション内のトークンと等しいかどうかを確認しますか?同様に、 xhr.setRequestHeader( 'X-CSRFトークン'、getCSRFTokenValue()); PHPはリクエストがサイトから来たものかどうかを知っています。 1つの質問:ヘッダーでトークンを送信することは安全ではないことを他の情報源が示していましたか? – tyler

+0

こちらもお手伝いします:http://stackoverflow.com/a/10336360/1352320 – tyler

関連する問題