如何将 GET 请求限制为仅限我的域?

问题描述 投票:0回答:4

在我的网站上,我可以使用 GET 请求触发某些操作,例如隐藏或删除评论的功能。我不是很担心,但如果有人使用 img src= url 设计攻击来删除评论或电子邮件,那会很烦人。有没有办法防止这种情况发生?

我使用 httponlycookies 作为登录数据。如果有人使用 img src 或变体,请求是否会提交有效的登录 cookie?我应该使用 POST 代替吗? POST 会减慢网站速度吗? cookie 非常少,因此浏览器可能会用一个数据包提交 cookie 和 POST,但我不知道 POST 和 cookie 是否必须分开。

所有这些答案似乎都需要考虑其他 3 个答案中未提及的内容。所以我会将其变成一个 wiki,以便人们可以获得更多信息,而不是查看已接受的答案。

http security post cookies
4个回答
3
投票

您在这里混淆了几个常见问题。

首先,正如其他人指出的那样,这种攻击被称为跨站点请求伪造。可能会导致来自另一个域的 GET 或 POST,并且由于请求将发送到 your 域,因此它将传入 your 域的 cookie,其中包括会话详细信息。

为了解决这个问题,当用户登录时,生成一个令牌(一些随机字符串),您网站上的所有链接和表单都会在该会话期间传回。当请求传入时,从 cookie 中获取会话详细信息,并查找应为该会话 GETted/POSTed 的令牌。如果未传递正确的令牌,则您可以忽略该请求/通知用户/日志详细信息以进行进一步调查。我建议使用最后一个,因为在实施此操作时,您很可能会错过一些无法使用的链接或表单。用户可能会直接离开,而不是花时间通知您。

其次,GET 请求应该是安全的(即仅显示数据而不进行任何更改),并且 POST 应该用于所有数据更改请求。首先,如果蜘蛛设法跟踪链接,导致蜘蛛不应该引起的变化。其次,作为用户刷新页面的备份 - 浏览器应该提醒他们将重新提交请求以及是否要继续。我之所以说作为备份,是因为您的所有请求都应该以这样的方式编写:如果重新提交,它们是无害/被忽略的,即没有请求删除最后一个项目的按钮,而是查找最后一个项目的 id为1423并且有请求删除1423的按钮;如果提交两次,那么第二次验证时应该会注意到第 1423 项不再存在并且不会导致进一步的更改。


1
投票

我应该使用 POST 吗?会发布 减慢网站速度?有非常 小cookies,以便浏览器可以提交 cookie 和 POST 一包 但是我不知道是否 POST 和 cookie 必须是单独的。

是的,在您的情况下最好使用 POST 以降低安全风险。并且不要优先考虑速度而不是安全性,请使用 POST,是的,post 和 cookie 不会相互冲突。

最后,我建议您使用 html 净化器 来确保您的网址和表单安全。


1
投票

您所讨论的风险称为跨站点请求伪造攻击。防止这种情况的标准方法是双重发布 cookie(一次在 cookie 中,一次在表单中),或攻击者无法通过包含的图像猜测到的其他一些独特标记。有关检测和预防的更多详细信息,请参阅:

http://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)


1
投票

我基本同意status203。除了他所说的 POST 没有真正帮助之外,还有一些评论:

1) 仅当应用程序编写正确时,GET 才是安全的。我见过使用 GET 甚至进行更改的应用程序。其次,关于这个主题,如果您以数组形式返回 JSON 数据,并且您的入口点未针对 CSRF 进行保护,则在某些浏览器上,攻击者可能能够通过诱使受害者访问具有

© www.soinside.com 2019 - 2024. All rights reserved.