Ajax和文件名 - 最佳实践

时间:2009-02-13 09:26:58

标签: ajax filenames

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

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

我在想什么可以进一步保护文件名?

目前,我在.php文件中进行了全局访问检查,检查用户是否已登录,是否可以访问此数据等。

但是我想知道是否还有其他步骤可以让用户看不到这个文件名,或者你建议采取什么其他步骤。

2 个答案:

答案 0 :(得分:2)

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

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

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

  

示例
原始网址:
  /ajax/delete.php?parameter1=foo&parameter2=bar

     

要求详情:
  行动=删除&安培;参数1 = FOO&安培;参数2 =条

     

编码请求详细信息(使用base64编码):
  YWN0aW9uPWRlbGV0ZSZwYXJhbWV0ZXIxPWZvbyZwYXJhbWV0ZXIyPWJhcg ==

     

编码网址:
  / AJAX /?请求= YWN0aW9uPWRlbGV0ZSZwYXJhbWV0ZXIxPWZvbyZwYXJhbWV0ZXIyPWJhcg ==

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

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

隐藏实施细节
您可以遵循许多做法,使您的应用程序不易受到URL滥用的攻击。<​​/ p>

让我们从以下网址开始:ajax / fetchDepartment.php?sec = departments&amp; 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更改的结果。

答案 1 :(得分:0)

您可以通过http不加载来为用户隐藏某条信息的URL的唯一方法。也许您可以在调用页面或其他具有更通用URL的页面上加载一组数据。