我使用jQuery通过$ .get方法调用PHP文件
function fetchDepartment(company_id)
{
$.get("ajax/fetchDepartment.php?sec=departments&company_id="+company_id, function(data){
$("#department_id").html(data);
});
}
我在想什么可以进一步保护文件名?
目前,我在.php文件中进行了全局访问检查,检查用户是否已登录,是否可以访问此数据等。
但是我想知道是否还有其他步骤可以让用户看不到这个文件名,或者你建议采取什么其他步骤。
答案 0 :(得分:2)
编码请求
通过对几乎所有的URL进行编码,然后解码服务器端的请求详细信息,您可以使请求详细信息对于偶然的不法分子有效。
请求详细信息将包括您要执行的操作以及与该操作相关的参数。
所有请求都将发送到一个URL,服务器端进程将解码请求详细信息并根据需要执行相关操作。
示例
原始网址:
/ajax/delete.php?parameter1=foo¶meter2=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的页面上加载一组数据。