3

次の URL ルートがあるとします。

app.post('upvote', function(req, res) {
  // make a database a call to increase vote count
});

他のユーザーがコンソールを開いて AJAX POST リクエストを送信するのを防ぐにはどうすればよいwww.mysite.com/upvoteですか? www.mysite.comその POST リクエストを行うことだけが許可され、他の誰も許可されないようにしたいと思います。

4

2 に答える 2

4

他のユーザーがコンソールを開いて AJAX POST リクエストを送信するのを防ぐにはどうすればよいですか

「他人」って誰?

other==サイトのユーザーの場合... JavaScript コンソールまたはその他の手段を使用して、彼らが好きなリクエストを送信するのを止めるためにできることは何もありません。クライアントを信頼できないため、サーバー側の承認が必要です。ユーザーがアカウントにログインすることを要求し、アカウントが賛成票を投じたことを登録して、再度投票できないようにします。

other== 他のサイトの管理者 (サイトへの送信を引き起こすスクリプトをユーザーに提供することにより) の場合... 別のサイトの JavaScript が AJAX POST 要求を引き起こすことはありません。少なくとも、意図的に選択しない限り、そうではありません。CORSを使用してそれに。<form>しかし、あなたのアドレスへのポインティングを作成して送信するだけで、POST を引き起こす可能性は十分にあります。

これは、クロス サイト リクエスト フォージェリの典型的な問題です。XSRF の問題に対する広く受け入れられている解決策は、各 POST (フォームまたは AJAX) 送信にパラメーターとしてシークレット トークンを含めることです。そのシークレット トークンは、サーバー側のセッションに保存されるか、クライアント側の Cookie に複製されることによって、ユーザーのログイン状態に関連付けられます。いずれにせよ、別のサイトからの攻撃者は、ログインしているユーザーに有効なトークンを取得できないため、リクエストを偽造することはできません。

AJAX であろうとフォームベースの POST であろうと、直接影響を与えるすべてのアクションに対してXSRF 保護が必要です。

于 2013-06-19T12:24:53.610 に答える
2

私はボビンスに同意します。othersは非常に一般的な用語です。

他サイト(ネット上の悪質サイト)に所属している場合。

  • Express にはcsrf、クロス サイト リクエスト フォージェリから保護するためのミドルウェアがあります。このようなシナリオを防ぐために使用できます。こちらの API ドキュメントを参照してください 。

他のユーザーが自分のサイトのユーザーである場合

  • それは認証の問題です。すべてのリクエストは、それを提供/実行する前にチェックする必要があります。このような状況を防ぐには、ユーザー認証を実装する必要があります。私はPassportapp.postを使用し、実際に ハンドラーを実行する前にユーザーが認証されていることを確認します。
于 2013-06-20T06:31:09.050 に答える