首先,非常感谢您制作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。一旦到位,您可以通过添加基于 Angular 色或基于用户的权限来进一步保护它。
例如,仅当用户提供该选项并且他们是“销售”组的成员时才允许附加“销售”用户组。
您将如何实际实现这一点取决于您使用的 PHP 框架(如果有)以及您的应用程序的要求。
关于javascript - 如何保护从 AJAX 文件传递到 jqGrid 的 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9933312/