假设用户想要删除帖子,并且您想要异步执行此操作,您可能会执行以下操作...
$.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,它在脚本中通过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文件中。因此,如果有人有任何建议或提示,我将不胜感激。
答案 0 :(得分:1)
不,这是不可能的。 XMLHttpRequest禁止访问跨源请求的响应,除非服务器根据Cross-Origin Resource Sharing明确允许它。
因此,在不同来源运行的这段代码将无法读取data
,除非服务器明确允许不同的来源这样做。如果服务器以Access-Control-Allow-Origin: *
响应,允许任何来源共享响应,则会出现后一种情况。
答案 1 :(得分:0)
有两个选项,第一个要求使用session(理想情况下使用HTTPS cookie)将用户与登录名相关联。这是PHP中最了解的技术,因此找到如何做的文档应该不难。但是,因为它依赖于客户端状态,所以它不是RESTful。
如果确实需要它是RESTful,那么另一个选择是使用HTTP digest authentication。这不需要任何特定的客户端状态,因此它符合REST,但它确实要求客户端在每次请求时发送正确的摘要。