最近我开始深入研究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;
});
如示例所示,ajaxsave.php负责删除与matchin POST linkid的链接。据我所知,可以将帖子表格提交给外部网址。这意味着每个人都可以查看我的源代码并使自己的帖子表单选择他们自己的linkid。这样他们就可以删除他们想要的所有链接。
如何保护我的代码? - 在ajaxsave.php中的Http引用者?卷曲脚本可能会破坏这一点。 - 在调用ajax函数的页面上使用会话或cookie?将会话保存在数据库中并在ajaxsave.php中检查它?
你能帮帮我吗?你如何以优雅的方式做到这一点。或者所有这些现代ajax网站上的“正常”是什么..答案 0 :(得分:11)
这可能为时已晚,无法使用,但简单的答案就是:
在ajaxsave.php中,您需要检查请求是否来自经过身份验证(已登录)和已授权(有权删除此链接)的用户。如果您没有做这些事情,那么您的网站肯定会有风险。
可选择您可以确定所有经过身份验证的用户都值得信任,并且能够删除他们想要的任何内容。但是,您仍然需要在ajaxsave.php中检查身份验证。
答案 1 :(得分:7)
无论您在客户端(即浏览器)上执行什么操作,都需要在服务器上处理此问题。基本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
即使您没有向我提供该网址的链接。就像我原先说的那样,你需要确保我拥有删除用户21的必要权限。
答案 2 :(得分:0)
好吧,我会告诉你一个方法。 您可以验证传入的请求
在服务功能内部进行会话检查。
if ((UserID!=0)||(UserID!= null))
{
//delete action code
}