0

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

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

在javascript中并发送ajax请求。

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

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

先感谢您。

4

2 回答 2

0

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

PHP 中的 CSRF

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

于 2013-06-06T19:40:34.697 回答
0

为什么不使用隐藏<input>

当有人访问评论页面时

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

当有人提交评论时,将$_POST的副本key$_SESSION的副本进行比较key

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

如果评论成功,请将“last_comment_time”(作为 int/whatever)添加到$_SESSION. 阻止该用户发表新评论,同时now - "last_comment_time" < some_time_span

于 2013-06-06T19:43:53.450 回答