代码之家  ›  专栏  ›  技术社区  ›  Lotus Notes

了解CSRF

  •  29
  • Lotus Notes  · 技术社区  · 16 年前

    我不明白使用“挑战代币”将如何增加任何类型的预防:应该将什么值与什么相比较?

    从 OWASP :

    一般来说,开发人员只需要 为 当前会话。首字母之后 生成此令牌,值为 存储在会话中并被利用 对于每个后续请求,直到 会话过期。

    如果我正确理解这个过程,就会发生这种情况。

    我登录 http://example.com 并创建包含此随机令牌的会话/cookie。然后,每个表单都包含一个隐藏输入,该输入还包含来自会话的随机值,该值在表单提交时与会话/cookie进行比较。

    但这有什么用呢?你不只是获取会话数据,将其放入页面,然后与完全相同的会话数据进行比较吗?好像是循环推理。这些文章一直在讨论遵循“同源策略”,但这毫无意义,因为所有csrf攻击都与用户同源,只是诱使用户执行他/她不打算执行的操作。

    除了将令牌作为查询字符串附加到每个url之外,还有其他选择吗?看起来非常丑陋和不切实际,使书签用户更难。

    4 回复  |  直到 8 年前
        1
  •  25
  •   rogeriopvl    16 年前

    攻击者无法获取令牌。因此,请求不会产生任何效果。

    我推荐Gnucitizen的这篇文章。它有一个相当不错的csrf解释: http://www.gnucitizen.org/blog/csrf-demystified/

        2
  •  11
  •   merlin2011    11 年前

    你需要不断地为自己研究这个话题,但我想这就是为什么你会这么写:)。 CSRF 是一种非常严重且普遍存在的漏洞类型,所有web应用程序开发人员都应该意识到这一点。

    首先,有不止一个 same origin policy . 但最重要的是 http://whatever.com 无法从中读取数据 http://victom.com ,但它可以通过post和get发送数据。如果请求只包含攻击者已知的信息,则攻击者可以在Victom浏览器上伪造请求并将其发送 在任何地方 . 这里有3个 XSRF exploits 正在生成不包含随机令牌的请求。

    如果站点包含随机令牌,则必须使用xss绕过同源策略提供的保护。使用xss,您可以强制javascript从另一个域“起源”,然后它可以使用xmlhttprequest读取令牌并伪造请求。这里是一个 exploit 我写的就是这个。

        3
  •  6
  •   BenKoshy Mayinx    8 年前

    CSRF用一个类比来解释-例如:

    想象一下你正在用钥匙打开你的前门。没人有你的钥匙。你打开门——但在你进去之前,你的邻居从马路对面打电话给你,你俩就天气进行了非常友好的交谈,或者特朗普总统最新的凌晨3点45分的推特等等。当你正在进行这一对话时,你不知道,有人她看到你在外面,决定穿上你的衣服和发型来冒充你,并决定假装成你走进你自己的房子!

    你家里没人注意到有什么不同——你妻子就像,哦,克鲁德,他在家。

    冒名顶替者用你所有的钱,也许在出去的路上玩一些Xbox,没人比他更聪明。

    csrf基本上依赖于这样一个事实:你打开了你家的门,然后让它开着,让别人只是走进来假装你。

    解决这个问题的方法是什么?

    当你第一次打开房门时,门卫会给你一张纸,上面写着一个很长很随机的数字:

    “ASDFLJWERLI234324”

    现在,如果你想进自己的房子,你必须把那张纸交给门卫才能进去。

    所以 现在 当冒充者试图进入你的房子时,门卫问:

    “纸上写的随机数是多少?”

    如果冒充者没有正确的号码,他就进不去。要么是这样,要么他必须正确地猜出随机数——这是一项非常困难的任务。更糟糕的是,随机数的有效期只有20分钟(例如)。所以知道冒名顶替者一定要猜对,不仅如此,他只有20分钟的时间才能得到正确的答案。那太费劲了!所以他放弃了。

    当然,这个比喻有点紧张,但我希望它对你有帮助。

    **CRUD=(创建、读取、更新和删除)

        4
  •  5
  •   Sripathi Krishnan    16 年前

    除了 将令牌附加到每个 URL作为查询字符串?看起来很丑 不切实际,并且使书签 对用户来说更难。

    没有理由将令牌附加到站点上的每个url, 只要 确保站点上的所有get请求都是只读的。如果使用get请求修改服务器上的数据,则必须使用csrf令牌对其进行保护。

    csrf的有趣之处在于,虽然攻击者可以向您的站点发出任何http请求,但他无法读回响应。

    如果您获得的url没有随机令牌,攻击者将能够发出请求,但他将无法读取回响应。如果该url更改了服务器上的某些状态,则攻击者的任务完成。但如果只是生成一些html,攻击者什么也得不到,而您什么也得不到。