1

ユーザーが投稿を削除したいとし、これを非同期で実行したいとします。おそらく次のようなことをします...

$.post('https://mysite.com/execs/remove.php?&post_id=' + post);

または、誰かがそのリンクをユーザーの投稿IDでコピーして、だまして削除させたくないので、そうしません。代わりに私はこれを行います...

$.post('https://mysite.com/remove.php?post_id=' + post + '&visit_session=' + visit_session);

スクリプトの前半でajaxを介して呼び出され、ログインするたびに変更されるシークレット訪問セッションIDをプラグインします。したがって、ユーザーがランダムIDを推測できない限り、リンクは失敗し、ユーザーは安全になります...

次に、誰かがこのユーザーの訪問セッションIDを盗むためのWebページを作成するのを妨げているのはなぜだろうか。悪意のある人は、基本的に、私のajaxリクエストをコピーして自分のサイトに貼り付け、このようなことをすることはできませんでした...

$.ajax({
type: 'GET',
  url: 'https://mysite.com/visit_session.php',
  dataType: 'json',
   success: function(data) {
    window.location = "https://mysite.com/remove.php?post_id=POSTID&visit_session=' + data.visit_session";
}
});

したがって、ユーザーがその小さなスクリプトを含むサイトをセットアップし、それをだまして投稿を削除したいユーザーにリンクした場合、それはそれだけではないでしょうか。(ユーザーが現在私のサイトにログインしていると仮定します)。

私がここで正しい考えを持っていると仮定すると、これを防ぐために何ができるでしょうか?

編集:JavaScriptファイル内のvisit session変数をポーリングする代わりに、次のようなことができることを知っています...

<script>
visit_session = "<?php echo $_SESSION['visit'] ?>";
</script>
<script src="https://mysite.com/javascript/main.js"></script>

これにより、悪意のあるユーザーが別のユーザーに代わってポーリングするのを防ぐことができます。ただし、それをすべてのページに追加する必要はなく、可能であればすべてをmain.jsファイルに保持したいと思います。ですから、誰かが何か提案やヒントがあれば、私はそれをいただければ幸いです。

4

2 に答える 2

1

いいえ、これは不可能です。XMLHttpRequestは、サーバーがクロスオリジンリソースシェアリングに従って明示的に許可しない限り、クロスオリジンリクエストの応答へのアクセスを禁止します。

したがって、別のオリジンで実行されたこのコードはdata、サーバーが別のオリジンで明示的に許可しない限り、読み取ることができません。後者は、サーバーが応答する場合に当てはまりますAccess-Control-Allow-Origin: *。これにより、任意のオリジンが応答を共有できるようになります。

于 2012-08-01T05:30:16.337 に答える
0

2つのオプションがあります。最初のオプションでは、セッション(理想的にはHTTPS Cookieを使用)を使用してユーザーをログインに関連付ける必要があります。これはPHPで最もよく知られている手法であるため、その方法に関するドキュメントを見つけるのは難しいことではありません。ただし、クライアントの状態に依存しているため、RESTfulではありません。

RESTfulである必要がある場合、他のオプションはHTTPダイジェスト認証を使用することです。これは特定のクライアント状態を必要としないため、RESTに準拠していますが、クライアントはすべてのリクエストで正しいダイジェストを送信する必要があります。

于 2012-07-31T20:24:39.040 に答える