1

假设用户想要删除帖子并且您想要异步执行此操作,您可能会执行类似...

$.post('https://mysite.com/execs/remove.php?&post_id=' + post);

或者您不会,因为您不希望有人能够仅复制该链接和用户的帖子 ID 并欺骗他们删除它。所以我这样做...

$.post('https://mysite.com/remove.php?post_id=' + post + '&visit_session=' + visit_session);

我插入了他们的秘密访问会话 ID,该 ID 在脚本前面通过 ajax 调用,每次登录时都会更改。因此,除非用户可以猜出他们的随机 ID,否则链接将失败并且用户将是安全的......

然后我想知道是什么阻止了某人创建网页来窃取该用户的访问会话 ID?一个恶意的人不能基本上只是将我的 ajax 请求复制并粘贴到他们自己的站点中并做这样的事情......

$.ajax({
type: 'GET',
  url: 'https://mysite.com/visit_session.php',
  dataType: 'json',
   success: function(data) {
    window.location = "https://mysite.com/remove.php?post_id=POSTID&visit_session=' + data.visit_session";
}
});

因此,如果用户建立了一个包含该小脚本的站点,然后将其链接到他们想要欺骗删除他们的帖子的用户,它不会这样做吗?(假设用户当前登录到我的网站)。

假设我在这里的想法是正确的,我能做些什么来防止这种情况发生?

编辑:而不是轮询我的javascript文件中的访问会话变量,我知道我可以做类似的事情......

<script>
visit_session = "<?php echo $_SESSION['visit'] ?>";
</script>
<script src="https://mysite.com/javascript/main.js"></script>

这将防止恶意用户代表另一个用户轮询它。但是,我宁愿避免将其添加到每个页面,如果可能的话,只需将其全部保存在 main.js 文件中。因此,如果有人有任何建议或提示,我将不胜感激。

4

2 回答 2

1

不,这是不可能的。XMLHttpRequest禁止访问跨域请求的响应,除非服务器根据Cross-Origin Resource Sharing明确允许。

data因此,除非服务器明确允许不同的来源这样做,否则在不同来源运行的这段代码将无法读取。Access-Control-Allow-Origin: *如果服务器响应允许任何来源共享响应,则后者将是这种情况。

于 2012-08-01T05:30:16.337 回答
0

有两个选项,第一个需要使用会话(最好使用 HTTPS cookie)将用户与登录相关联。这是 PHP 中最知名的技术,因此查找有关如何操作的文档应该不难。但是,因为它依赖于客户端状态,所以它不是 RESTful。

如果您确实需要它是 RESTful 的,那么另一个选项是使用HTTP digest authentication。这不需要任何特定的客户端状态,因此它符合 REST,但它确实需要客户端在每个请求中发送正确的摘要。

于 2012-07-31T20:24:39.040 回答