2012-06-18 12 views
3

我遇到過很多文章,這些文章通過使用鏈接提供註銷功能來警告。他們都建議使用表單和按鈕來註銷。通過點擊鏈接而不是表單按鈕來設計註銷功能的網頁是否安全?

當我用螢火蟲來檢查了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 

使用,因爲一個鏈接,他們有href是https?這種用法有多安全?

+1

什麼是這些文章給了避免使用鏈接的原因是什麼? –

+0

我不熟悉那個建議。我使用的許多網絡應用程序都提供了用於註銷的標準url(例如/註銷)以及指向該URL的鏈接。你可以提供鏈接到其中一篇文章的任何改變?我很好奇。 –

+0

我在我的書籤中找不到文章鏈接,但在機器中安裝了一個爬蟲插件(用於瀏覽html頁面中的所有鏈接)時,有時會單擊註銷鏈接並註銷用戶。因此,文章推薦使用的形式和按鈕 – damon

回答

2

開發人員不鼓勵使用鏈接而不是表單的原因是因爲它使站點面臨CSRF(跨站點請求僞造)攻擊。想象一下你有一個網站,登出的網址是example.org/?logout。如果您訪問我的網站,並加載該網址,它會在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值是隨機在加載頁面時生成。加載url example.org?logout時,它會檢查會話以確保隨機密鑰與表單提交的密鑰相同。如果不相同,用戶可能不會註銷。如果它是相同的,他們可以。

這個簡單的方法可以停止描述的CSRF攻擊。它簡單而有效,而且沒有理由不實施它。

2

使用GET來註銷用戶沒有什麼不尋常的。無論如何,這是一個不好的做法。例如,如果您已登錄Gmail帳戶,請訪問this page以查看「結果」。而且,HTTP或HTTPS無關緊要。

但是,這個技巧不適用於Stackoverflow http://stackoverflow.com/users/logout。無論如何,更好地註銷用戶,是使用POST請求或隨機令牌:

http://site.com/logout?token=123456 
相關問題