10 forms security ajax jquery post
最近我开始深入研究jquery的ajax函数.我做了很多改进,但在某一方面我没有安全感.如何保护我的ajax调用..
例如,此代码用于删除链接:
// Delete link
$('.delete_update').live("click",function() {
var ID = $(this).attr("id");
var dataString = 'linkid='+ ID;
if(confirm('<?php echo _("Are you sure you want to delete this link?");?>')) {
$.ajax({
type: "POST",
url: "ajaxsave.php",
data: dataString,
cache: false,
success: function(html){
$(".bar"+ID).fadeOut('slow', function() {$(this).remove();});
}
});
}
return false;
});
Run Code Online (Sandbox Code Playgroud)
如示例所示,ajaxsave.php负责删除与matchin POST linkid的链接.据我所知,可以将帖子表格提交给外部网址.这意味着每个人都可以查看我的源代码并使自己的帖子表单选择他们自己的linkid.这样他们就可以删除他们想要的所有链接.
我如何保护我的代码? - 在ajaxsave.php中的Http引用者?卷曲脚本可能会破坏这一点. - 在调用ajax函数的页面上使用会话或cookie?将会话保存在数据库中并在ajaxsave.php中检查它?
你能帮助我吗?你如何以优雅的方式做到这一点.或者所有这些现代ajax网站上的"正常"是什么..
Sea*_* W. 11
这可能为时已晚,无法使用,但简单的答案是这样的:
在ajaxsave.php中,您需要检查请求是否来自经过身份验证(已登录)和已授权(具有删除此链接的权限)用户.如果你没有做那些事情那么你的网站肯定有风险.
或者,您可以确定所有经过身份验证的用户都值得信任,并且能够删除他们想要的任何内容.但是,您仍然需要在ajaxsave.php中检查身份验证.
无论您在客户端(即浏览器)上执行什么操作,都需要在服务器上处理此问题.基本Web应用程序设计涉及身份验证和授权.前者是"你是谁,你说你是谁",通过登录来处理,后者是'你有权做你想做的事'.您必须在服务器上处理授权 - 您应该做的第一件事是检查以确保用户具有执行正在尝试执行的操作的适当授权.
当你说'据我所知,有可能将一个帖子表格提交给外部网址.这意味着每个人都可以查看我的源代码并使自己的帖子表单选择他们自己的linkid.这样他们就可以删除他们想要的所有链接.你担心有人可以查看你的javascript,看到一个网址,然后在自己的网站上设置一个指向你网址的表单吗?这是不可能的,因为所有浏览器都实现相同的源策略.相同的原始政策意味着如果您在www.example.com,则无法向www.example2.com(以及其他内容)发出ajax请求.所以有人无法设置www.example2.com,然后尝试使用ajax在www.example.com(您的网站)上发布.你可以用任何其他工具的数量来做到这一点.
例如,没有什么能阻止用户在浏览器中输入网址并尝试操纵系统.比如说你可以删除用户
www.example.com/user/delete/20
这意味着删除ID为20的用户.一看到,我就可以输入浏览器了
www.example.com/user/delete/21
即使您没有向我提供该URL的链接.就像我原先说的那样,你需要确保我拥有删除用户21所需的权限.