编码请求
您可以通过对几乎所有 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 更改的结果。