1

我正在使用 jQuery 通过 $.get 方法调用 PHP 文件

function fetchDepartment(company_id)
{
    $.get("ajax/fetchDepartment.php?sec=departments&company_id="+company_id, function(data){
        $("#department_id").html(data);
    });
}

我在想的是我可以进一步保护文件名吗?

目前我在 .php 文件中有一个全局访问检查,检查用户是否登录,他是否可以访问这些数据等。

但是我想知道是否可以采取进一步的步骤使用户看不到此文件名,或者您建议采取哪些其他步骤。

4

2 回答 2

2

编码请求
您可以通过对几乎所有 URL 进行编码,然后在服务器端解码请求详细信息,使临时不法分子有效地看不到请求详细信息。

请求详细信息将包括您希望执行的操作以及与该操作相关的参数。

所有请求都将发送到单个 URL,服务器端进程将在其中解码请求详细信息并根据需要执行相关操作。

示例
原始 URL:
/ajax/delete.php?parameter1=foo¶meter2=bar

请求详情:
action=delete¶meter1=foo¶meter2=bar

编码请求详情(使用 base64 编码):
YWN0aW9uPWRlbGV0ZSZwYXJhbWV0ZXIxPWZvbyZwYXJhbWV0ZXIyPWJhcg==

编码 URL:
/ajax/?request=YWN0aW9uPWRlbGV0ZSZwYXJhbWV0ZXIxPWZvbyZwYXJhbWV0ZXIyPWJhcg==

我不相信在 JavaScript 中编码为 base64 的本机功能,但要找到合适的方法或编写自己的方法远非不可能。

使用混淆/缩小的客户端 JavaScript 来确定如何“手动”发出请求将非常棘手。

隐藏实现细节
您可以遵循许多实践来使您的应用程序不易受到 URL 滥用的攻击。

让我们从一个 URL 开始:ajax/fetchDepartment.php?sec=departments&company_id=99

无需透露您正在使用的服务器端技术 (PHP),也无需通过查询字符串 (sec, company_id) 透露查询字符串值的实际含义

屏蔽服务器端技术
假设您已index.php定义为默认值,以下 URL 是等效的:

  • ajax/fetchDepartment.php?sec=departments&company_id=99
  • ajax/fetchDepartment/index.php?sec=departments&company_id=99
  • ajax/fetchDepartment/?sec=departments&company_id=99

第三个 URL 不会显示您正在使用的服务器端技术。这限制了可能的攻击范围。它还使您可以更轻松地切换到不同的服务器端技术,而无需更改 URL。

隐藏请求参数的含义

  • ajax/fetchDepartment/?sec=departments&company_id=99
  • ajax/99/departments/

后一个 URL 仍然传达了足够的信息来执行请求,而不会透露信息的含义。

虽然有人仍然可以改变价值观,但他们不知道他们在改变什么。这将使攻击者更难评估和理解他们所做的任何 URL 更改的结果。

于 2009-02-13T16:03:10.077 回答
0

几乎唯一可以隐藏用户某条信息的 URL 的方法是不通过 h​​ttp 加载它。也许您可以在调用页面或具有更通用 url 的另一个页面上加载一组数据。

于 2009-02-13T09:41:44.173 回答