栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

PHP中的CSRF(跨站点请求伪造)攻击示例和预防

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP中的CSRF(跨站点请求伪造)攻击示例和预防

如果满足以下条件,这可能成为CSRF的示例:

  • 该链接已获取
    <img>
    例如,通过标签)
    :伪造
  • 来自另一个站点:跨站点

例如,如果我可以将此

<img>
标签注入stackoverflow的HTML源代码中
(并且我可以,因为允许一个人
<img>
在他的帖子中使用标签)

<img src="http://mysite.com/vote/30" />

您只需为该项目投票;-)

通常使用的解决方案是将寿命有限的令牌放置在URL中,并在提取URL时检查此令牌是否仍然有效。

基本思想是:

  • 生成页面时:
    • 生成唯一令牌
    • 将其存储在用户的会话中
    • 并将其放在页面的链接中-看起来像这样:
      http://mysite.com/vote/30?token=AZERTYUHQNWGST
  • 调用投票页面时:
    • 检查令牌是否存在于URL中
    • 检查它是否存在于用户会话中
    • 如果不是=>不要注册投票

这里的想法是:

  • 代币寿命不长,很难猜测
  • 这意味着您的 攻击者
    • 只有几分钟的窗口,在此期间他的注射将有效
    • 将不得不善于猜测^^
    • 将必须为每个用户生成一个不同的页面。

另外,请注意,用户离开您的网站后,其会话保持活动状态的时间越短,访问该不良网站时该会话仍然有效的风险就越小。

但是在这里,您必须在安全性和用户友好性之间进行选择。

另一个想法 (虽然不是很安全,但是对伙计们的帮助不会知道如何强制执行POST请求) 是仅在人们投票时才接受POST请求:

  • 浏览器正在发送GET请求以插入标记
  • 无论如何,由于此网址正在修改某些数据,因此它不应与GET一起使用,而只能与POST一起使用

但是请注意,这并不是绝对安全的 :(可能是?) 可以使用一些Javascript强制/伪造POST请求。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/465785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号