Javascript 如何保护';将从AJAX文件传递到jqGrid

Javascript 如何保护';将从AJAX文件传递到jqGrid,javascript,php,json,ajax,jqgrid,Javascript,Php,Json,Ajax,Jqgrid,首先,非常感谢您制作jqGrid!这是一件很棒的作品 当我的index.php文件将JSON编码的搜索条件发布到我的grid.php文件时,grid.php会处理这些条件,查询数据库,并将JSON编码的字符串返回给index.php,index.php会依次获取结果并将其呈现在jqGrid表中 一切都运转良好 但是,如果内部用户将浏览器指向grid.php,它将返回一组满足默认条件的记录(按编程,每页30条记录、字段及其数据)。而且,由于我已将其设置为POST,用户可以将查询参数手动附加到gri

首先,非常感谢您制作jqGrid!这是一件很棒的作品

当我的index.php文件将JSON编码的搜索条件发布到我的grid.php文件时,grid.php会处理这些条件,查询数据库,并将JSON编码的字符串返回给index.php,index.php会依次获取结果并将其呈现在jqGrid表中

一切都运转良好

但是,如果内部用户将浏览器指向grid.php,它将返回一组满足默认条件的记录(按编程,每页30条记录、字段及其数据)。而且,由于我已将其设置为POST,用户可以将查询参数手动附加到grid.php,例如:

    http://foo.bar/grid.php?clientID=123&city=anytown
我在index.php和grid.php中都进行了安全检查。例如:

    if(userGroup='Sales'){
       $sqlstr = "SELECT * FROM table WHERE group='SALES'";
    }else{
       $sqlstr = "SELECT * FROM table";
    }
但问题是,他们可以通过将浏览器直接指向grid.php绕过这些检查

有人对如何保护grid.php返回的字符串有什么建议吗

更新

根据贾斯汀的建议,我认为我现在可能走上了正确的道路。类似的方法可能会奏效:

    $trace = debug_backtrace();
    if ($trace[0]['file'] != 'index.php'){
       echo "There was an error. Please contact your Systems Administrator.";
       return 0;
    }

好吧,这并没有像预期的那样奏效。我将此信息留给后代。

您需要添加PHP代码来保护grid.PHP URL。首先,如果您的应用程序可行,您可以添加一个身份验证系统,以防止任何用户访问URL。这一点一旦到位,您就可以通过添加基于角色或基于用户的权限来进一步保护它

例如,仅当用户提供“销售”选项并且他们是“销售”组的成员时,才允许附加“销售”用户组


如何实际实现这一点取决于您使用的PHP框架(如果有的话)和应用程序的要求。

如何获得$userGroup?我猜你可能在找治疗。您没有执行类似于&usergroup=Sales的操作,是吗?永远不要在客户机上构建SQL语句。始终使用经过验证的参数并在服务器上执行。我使用的是会话,用户组是通过postData从index.php发送的。但是,我不确定这将如何减轻grid.php发送回index.php的内容。谢谢你,我并不是这样构建我的查询的。这只是一个例子。嗨,贾斯汀,非常感谢你的建议!所以通过.htaccess对该文件进行密码保护是行不通的,但您的建议给了我一个方向。我继承了这个CRM,它不是建立在任何类型的框架上的,但是肯定有一种方法可以编写类似这样的代码:“如果./index.php正在调用我,那么就响应。否则就输出一个错误。”现在来弄清楚如何做。我愿意接受建议:)嗯。。。如果正确的数据是(或可以提供),那么最好使用会话中的数据来执行此检查。例如,如果您可以说
if($\u SESSION['role\u permissions]['sales']){…}
。但很明显,这需要对应用程序进行更大的更改。这是一个很好的选择。虽然这些变化可能涉及更多,但我认为这是一个可行的解决方案。我会开枪的。谢谢你的厚颜无耻!