-1

最も強力なCSRF保護の間に、フォームトークン保護があります。この方法について私が持っている質問は、使いやすさについてです。ユーザーがトークンを使用するフォームを含む複数のページを開くと、複数のトークンが生成されますが、最後に開いたページだけがフォームを正常に送信でき、他のすべてのページはエラーになります。

私は2つの解決策を考えました:

  1. セッションのすべての期間中、一意のトークンを保持します。
  2. 生成されたすべてのトークンをセッションに保存します。

だが:

  1. これはより現実的な解決策ですが、安全性は低くなります。
  2. これは、ユーザーが多くのページを開く可能性があるため、大きなリソースオーバーヘッドを生成し、生成されたすべてのトークンを保存する必要があります。

したがって、この質問をどのように解決しましたか?

PS私が開発しているウェブサイトは、実質的にPHPのeコマースであり、送金は外部プロバイダー(ペイパルなど)を介して管理されますが、私のサービスには十分な安全性があると思います。

4

1 に答える 1

2

データベースにトークンを保存する必要はありません。

代わりに、同じトークンをCookieに含める必要があります。クロスサイト攻撃者はCookieを読み取ったり設定したりすることはできません。
投稿されたフォームと同じトークンをCookieで取得する限り、安全です。

セキュリティを強化するために、キー付きHMACハッシュを使用してそれらをハッシュし、そのハッシュを検証して、トークンがサーバーからのものであることを確認できます。
ユーザーごとにトークンを作成することもできます。

于 2012-08-24T13:32:41.973 に答える