什么是阻止对 HTML 表单中 action 属性中的链接的攻击?

Posted

技术标签:

【中文标题】什么是阻止对 HTML 表单中 action 属性中的链接的攻击?【英文标题】:What is stopping attacks on the link in the action attribute in HTML forms? 【发布时间】:2018-10-18 15:02:09 【问题描述】:

我知道标题听起来令人困惑,所以我想知道的是:

假设我有一个用户可以在https://example.com/login 登录的页面。页面中的表单如下所示:

<form method="post" action="https://example.com/api/auth/login">
    <!-- input fields here -->
    <button type="submit" value="Sign in">
</form>

https://example.com/api/auth/login 的脚本检查用户指定的用户名和密码是否正确。然后它会适当地响应 JSON。

但是,您可以在action 属性中获取此链接,并通过执行重复请求来猜测用户名和密码。作为开发人员,我应该怎么做才能防止此类攻击的发生?

【问题讨论】:

【参考方案1】:

你描述的攻击名称是跨站请求伪造,CSRF。

您确实应该实施 csrf 保护,您可以从多个选项中进行选择。如果您的应用程序是有状态的(存储在会话中并在页面 html 中生成的随机令牌,然后在每次发布请求时在服务器上发送和比较)或类似双重发布(在cookie 并作为请求标头并在服务器上比较两者)如果您的应用是无状态的。

它不仅会影响登录,还会影响任何暗示应用程序状态更改的操作(主要但不限于数据更改)。

另外请注意,由于同源策略,任何试图利用此策略的攻击者都不会直接知道登录(或任何其他操作)是否成功。但很多时候这并不重要,他们只是猜测。

【讨论】:

以上是关于什么是阻止对 HTML 表单中 action 属性中的链接的攻击?的主要内容,如果未能解决你的问题,请参考以下文章

对 HTML 表单的 action 属性使用空 URL 是一种好习惯吗? (动作="")

form中action是啥意思

在 HTML 中表单标签的 action 属性中使用“/xxxx.form”[关闭]

thinkphp5无法用html表单中的action跳转到另一个页面?

form表单提交上传图片

js阻止表单重复提交