3

リンクを使用してログアウト機能を提供することに対して警告する多くの記事に出くわしました。ログアウトにはフォームとボタンを使用することをお勧めします。

Firebugを使用してGmailのログアウト要素のHTMLを調べたところ、それがリンクであることがわかりました。

<a target="_top" role="button" id="gb_71" onclick="gbar.logger.il(9,{l:'o'})" href="?logout&amp;hl=en" class="gbqfbb">Sign out</a>

hrefようなものがあります

https://mail.google.com/mail/ca/?logout&hl=en

hrefhttpsであるため、リンクを使用していますか?この使用法はどのくらい安全ですか?

4

2 に答える 2

2

開発者がフォームではなくリンクを使用することを推奨されない理由は、サイトがCSRF(Cross Site Request Forgery)攻撃にさらされたままになるためです。あなたがサイトを持っていて、ログアウトURLがであると想像してくださいexample.org/?logout。私のサイトにアクセスし、そのURLをロードすると、example.orgの現在のセッションからログアウトされます。これは破壊的なようには見えませんが、ログインを続けなければならないのはかなり面倒です。

フォームとして実装した場所を想像してみてください...

<form action="?logout" method="POST">
  <input type="hidden" value="blahblah" name="key" alt="I am a random key!" />
  <input type="submit" value="Log out..." />
</form>

の値はkey、ページの読み込み時にランダムに生成されます。URLexample.org?logoutがロードされると、セッションをチェックして、ランダムキーがフォームによって送信されたものと同じであることを確認します。同じでない場合、ユーザーはログアウトできない可能性があります。それが同じなら、彼らはそうするかもしれません。

この簡単な方法は、説明されているCSRF攻撃を阻止します。それはシンプルで効果的であり、それを実装しない理由は本当にありません。

于 2012-06-18T19:32:21.487 に答える
2

GETを使用してユーザーをログアウトするのは珍しいことではありません。とにかく、これは悪い習慣です。たとえば、Gmailアカウントにログインしている場合は、このページにアクセスして「結果」を確認してください。また、HTTPまたはHTTPSは関係ありません。

ただし、このトリックはStackoverflowでは機能しませんhttp://stackoverflow.com/users/logout。とにかく、ユーザーをログアウトする方が良いのは、POSTリクエストまたはランダムトークンを使用することです。

http://site.com/logout?token=123456
于 2012-06-18T19:39:35.840 に答える