通过改变PHP / AJAX

时间:2018-04-27 19:58:18

标签: php ajax security

我有几种形式,用户可以更改与其帐户相关的事件,但我不知道如何处理涉及用户更改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);

如果有点击,那么他们就有权访问,如果没有行,那么他们就没有。

对于此示例,可以在单个查询中删除三个变量,但情况并非总是如此。另外这是使用替换的表/列名称因为我猜错,但结构是相同的。

1 个答案:

答案 0 :(得分:0)

您没有可靠的方法来保证the client-side code is doing what you want it to do

您的服务器端软件应不信任所有输入,无论您已经编写了任何客户端验证。 (例如,用户甚至可能没有运行JavaScript。)

这不是可以神奇解决的问题。这只是有关网络计算机和软件开发的现实。