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



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

假设我有一个用户可以登录的页面,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属性中抓取此链接,并通过执行重复请求来猜测用户名和密码。作为开发人员,我应该怎么做才能防止此类攻击的发生?

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

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

它不仅影响登录,还影响任何暗示应用程序中状态更改的操作(主要是但不完全是数据更改(。

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

最新更新