2

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

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

4

1 回答 1

0

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

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

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

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

于 2018-05-08T15:44:04.563 回答