【问题标题】:How does CSRF get access to information of some website to exploit security?CSRF 如何获取某些网站的信息以利用安全性?
【发布时间】:2018-12-22 11:59:42
【问题描述】:

我一直在尝试了解 CSRF 攻击。我知道它使用来自有效站点会话的凭据,并使用来自另一个站点的会话信息向有效站点发出请求。

我想知道任何人如何访问会话信息(一个域的 cookie 无法从另一个域访问)。我想知道攻击者是如何欺骗服务器的。我希望看到一些现实生活场景的答案。

【问题讨论】:

  • 明确一点:并非您描述的有关 CSRF 的所有内容实际上都是完全正确的,或者至少您暗示了某些事情(访问会话信息)并没有准确地发生。
  • 没有会话信息,其他站点如何请求此类攻击?
  • 查看我的回答;P(但基本上:它会欺骗 进行请求,而您显然拥有该会话信息)
  • 感谢您回答这样一个广泛的问题。真的很感激。其实我对自己的理解水平不是很满意。我知道会发生什么,但不知道它是如何发生的。就像你说的“但基本上:它会欺骗你做请求,而且你显然有那个会话信息”,但是怎么做呢?
  • 基本上与您向自己的 api 发出请求的方式相同。例如。用javascript。我很容易制作一个在后台向stackoverflow页面发布帖子的页面。如果您想了解更多信息,请阅读 ajax 调用和 javascript。这就是您在自己的页面(跨站点)上执行此操作的原因,因为我可以在那里注入尽可能多的 javascript。这似乎在 cmets 中进入了一个相当长的 q/a 会话,我真的不相信这是解决这个问题的好方法,并且担心人们投票结束。请注意不要进入太多

标签: security csrf csrf-protection websecurity


【解决方案1】:

基本概念可以很简单地解释。虽然完整的故事有些复杂(这可能是您被投票以“过于宽泛”而结束的原因),但我认为一个简单的示例可能会有所帮助

您在 stackoverflow 上有一个帐户,您可以在其中为答案投票(例如这个)。我可以创建一个网站,调用 stackoverflow 在后台支持这个答案。因此,我会将您链接到该站点,然后您会自动为我投票。这很糟糕!

所以刚刚发生的情况是调用(请求)是我从另一个页面(跨站点)伪造(伪造)的。

Stackoverflow 必须采取预防措施来检查对 upvote-api 的每次调用实际上是由您从他们自己的站点完成的,而不是我偷偷摸摸的(通过您)。

这可能出错的最简单方法是,如果upvote 按钮只是一个发给https://stackoverflow.com/api/upvote/{id} 的api 帖子。如果您已登录并且我让您在后台从 javascript 发布到该 api,那么您会投赞成票并且永远不会对此更加明智。任何好的实现都试图通过使用任何众所周知的反 csrf 技巧(例如令牌)来避免这种情况,但是这样做会使我们非常坚定地进入“过于宽泛”的类别:D

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 2015-02-10
    • 2020-07-17
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    相关资源
    最近更新 更多