我有几种形式,用户可以更改与其帐户相关的事件,但我不知道如何处理涉及用户更改data-employeeID中设置的值的安全性。
我最初设置了一个安全检查脚本,该脚本将查看通过ajax请求进入的标识数据,然后再继续实际使用它。它首先会执行一系列的mysql连接,然后回到Users表,然后进行最后的检查,以确保使用会话存储的用户ID来确定users表的ID_NO。
我认为这会起作用并且安全。但该网站相当大,通常通过ajax调用传递5或6个值。因此,在每个面向公众的功能上,我都需要重复每个变量的过程(除非它们可以在此过程中捆绑在一起;并非总是可行),然后再继续。
在谷歌上搜索之后,我只发现了与php / ajax处理错误相关的结果,或者是围绕发出请求的用户的安全性。
如果用户是合法的,他们仍然可以在页面上进行更改,并保留所有正确的信息,除了将会议ID之类的内容更改为其他内容。如果我只通过我的回调链检查用户CompanyID或DepartmentID并跳过会议ID,他们将能够将数据插入到数据库中,这是不准确的,会议可能被操纵,因为我没有创建回调链接在ajax和PHP之间传递的每个变量。
我觉得必须有一个更好的方法,这是一个已经解决的问题,所以我希望有人能指出我正确的方向,然后才能深入研究制作一个过于复杂的过程。感谢。
请求的示例代码:
$.ajax({
type: "POST",
url: "<?php echo base_url().'meetings/addstarttime/'?>",
data: {
validDaysID: this.dataset.validdaysid,
departmentID: this.dataset.departmentID,
companyID: this.dataset.companyID,
employees: employeesArray,
start: this.dataset.start
},
success: function(data){
//update html to show updated values
$validDaysID = $_POST['validDaysID'];//unencoded
$securityArray[] = array("validDays", $validDaysID)//Check if access to this value is OK
$tieItBack[] = array("Buildings", "BuildingID");
$tieItBack[] = array("Location", "LocationID");
$tieItBack[] = array("Department", "DepartmentID");
$tieItBack[] = array("Companies", "CompanyID");
从那里我创建一个查询,为最初请求的表选择行的COUNT(*),validDays,INNER JOINS tieItBack链中指定的表,然后最终检查Companies.ID_NO == $ this-&gt;会话级&GT;用户数据(&#39; CompanyID&#39);
如果有点击,那么他们就有权访问,如果没有行,那么他们就没有。
对于此示例,可以在单个查询中删除三个变量,但情况并非总是如此。另外这是使用替换的表/列名称因为我猜错,但结构是相同的。
答案 0 :(得分:0)
您没有可靠的方法来保证the client-side code is doing what you want it to do。
您的服务器端软件应不信任所有输入,无论您已经编写了任何客户端验证。 (例如,用户甚至可能没有运行JavaScript。)
这不是可以神奇解决的问题。这只是有关网络计算机和软件开发的现实。