Html 设计一个通过点击链接而不是表单按钮来完成注销功能的网页是否安全?
我遇到过许多文章警告不要使用链接来提供注销功能。他们都建议使用表单和按钮进行注销 当我使用firebug检查gmail注销元素的html时,我发现它是一个链接:Html 设计一个通过点击链接而不是表单按钮来完成注销功能的网页是否安全?,html,gmail,csrf,logout,Html,Gmail,Csrf,Logout,我遇到过许多文章警告不要使用链接来提供注销功能。他们都建议使用表单和按钮进行注销 当我使用firebug检查gmail注销元素的html时,我发现它是一个链接: <a target="_top" role="button" id="gb_71" onclick="gbar.logger.il(9,{l:'o'})" href="?logout&hl=en" class="gbqfbb">Sign out</a> 他们使用链接是因为href是https吗?
<a target="_top" role="button" id="gb_71" onclick="gbar.logger.il(9,{l:'o'})" href="?logout&hl=en" class="gbqfbb">Sign out</a>
他们使用链接是因为
href
是https吗?这种使用有多安全?不鼓励开发人员使用链接而不是表单的原因是,这样会使站点受到CSRF(跨站点请求伪造)攻击。假设您有一个站点,注销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>
键的值将在加载页面时随机生成。加载urlexample.org?logout
时,它会检查会话以确保随机密钥与表单提交的密钥相同。如果不相同,则用户可能无法注销。如果是相同的,他们可能会
此简单方法可停止所述的CSRF攻击。它简单有效,没有理由不实施它。使用GET-to-logout用户没有什么不寻常的。不管怎么说,这是一个坏习惯。例如,如果您登录了Gmail帐户,请访问查看“结果”。而且,HTTP或HTTPS并不重要
但是,这个技巧不适用于Stackoverflowhttp://stackoverflow.com/users/logout
。无论如何,注销用户最好使用POST请求或随机令牌:
http://site.com/logout?token=123456
那些文章给出的避免使用链接的原因是什么?我不熟悉这个建议。我使用的许多web应用程序都提供了用于注销的标准url(例如/注销),以及指向该url的链接。你能提供这些文章的链接吗?我很好奇。我在我的书签中找不到文章链接,但有一个例子,当机器中安装了一个爬虫插件(用于搜索html页面中的所有链接)用来单击注销链接,从而注销用户。因此,文章建议使用表单和按钮。所以,我猜来自site2的csrf攻击可以攻击经过身份验证的用户(关于site1)单击site2上看似无害的链接,该链接实际上是带有“site1/注销”的链接
http://site.com/logout?token=123456