【问题标题】:preventing cross site request forgery using cookie generated using javascript使用 javascript 生成的 cookie 防止跨站点请求伪造
【发布时间】:2013-06-07 08:51:58
【问题描述】:

我正在建立一个需要接受用户评论的网站, 从我的 home.php 我发送一个 ajax 请求(post),其值为评论文本和元素 id 到 comment.php,它检查会话 id 并将评论保存到数据库, 我最近发现(因为我对网络安全非常陌生),当我的网站在其他选项卡中运行时,我可以从任何网站向这个 comment.php 提交表单(因为会话 ID 将出现)。 为了防止跨站点请求伪造,我使用了以下技术, 在发送 ajax 请求之前,我使用

document.cookie = name+"="+value+expires+"; path=/; ";

在 javascript 中并发送 ajax 请求。

在comment.php 文件中检查会话ID 并比较来自_POST[] 和_COOKIE 的元素ID 值,如果两者相同,我将其视为有效请求并继续。

我的问题是,这是防止跨站点请求伪造的正确方法,还是其中存在任何逻辑漏洞仍可能导致 CSRF 或任何其他漏洞..?

提前谢谢你。

【问题讨论】:

    标签: javascript security cookies csrf


    【解决方案1】:

    我认为您正在寻找的是以下内容

    CSRF in PHP

    请浏览网站的其他部分以获取完整的详细信息。

    【讨论】:

      【解决方案2】:

      为什么不使用隐藏的<input>

      当有人访问评论页面时

      • 生成唯一 ID key
      • 保存key$_SESSION
      • 将隐藏的<input>s 值设置为key

      当有人提交评论时,将$_POSTkey 副本与$_SESSIONkey 副本进行比较

      • 如果他们匹配,看起来合法,接受评论然后删除 key$_SESSION
      • 如果不匹配,则说明出现问题

      如果评论成功,将“last_comment_time”(作为int/whatever)添加到$_SESSION。在now - "last_comment_time" < some_time_spannow - "last_comment_time" < some_time_span

      【讨论】:

      • 恐怕我不能这样做,因为 home.php 页面上有很多元素。考虑有人愿意通过评论他的网站或任何产品来向该网站发送垃圾邮件。他将打开 home.php 并查看“唯一 id 键”并使用循环编写 php,以使用该“唯一 id 键”作为隐藏 在他的帖子中以这种方式提交对 home.php 页面上每个元素的评论可以使用单个脚本发布数百万 cmets。只是为了避免这种情况,我正在使用我提到的过程(每次用户 cmets 生成一个带有特定注释元素 id 的 cookie,它将在 10 秒内过期)
      • 在评论时我怀疑如果垃圾邮件发送者试图在单个元素上写入数百万 cmets 会怎样。即使使用我的技术,也有可能避免在将comment.php 中的cookie 与_post [] 进行比较后将其设为空。这样,他也不能对单个元素发表多个评论。我应该感谢你,因为如果没有你的评论,我可能不会得到这个(在这种情况下,我不会评论也不会得到那个):)
      • @MohanKrishna 从$_SESSION 清除往往比清除 cookie 容易得多,并且需要他们重新加载评论页面才能进行第二次评论 -> 更多的努力。它始终是一场猫捉老鼠的游戏,所以只要做到这一点,他们就不得不付出过多的努力,以至于很少有人担心/处理每个用户。
      • @Mohan:不,您每次访问带有表单的页面时都会为每个用户生成一个新 ID。 “垃圾邮件”以猜测有效的唯一 ID 是可能的,但在实践中极不可能。另一方面,使用单个硬编码 ID 很容易破解。
      • @Mohan:如果你想禁止写一百万 cmets,那么你需要禁止某人写一百万 cmets。这与 CSRF 无关。世界上没有任何 CSRF 保护可以阻止某人编写以有效方式但以自动化方式使用您的网站的内容。为此,您需要像 CAPTCHA 这样的东西。
      猜你喜欢
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      相关资源
      最近更新 更多