Закодированные запросы
Вы можете сделать детали запроса фактически невидимыми для случайного злоумышленника, кодируя почти все URL-адреса и затем декодируя детали запроса на стороне сервера.
В детали запроса будет включено действие, которое вы хотите выполнить, а также параметры, относящиеся к этому действию.
Все запросы будут отправлены на один URL-адрес, где процесс на стороне сервера расшифрует детали запроса и при необходимости выполнит соответствующее действие.
Пример
Оригинальный URL:
/ajax/delete.php?parameter1=foo¶meter2=bar
Подробности запроса:
действие = удаление и параметр1 = Foo & параметр2 = бар
Кодированные детали запроса (закодированы с использованием base64):
YWN0aW9uPWRlbGV0ZSZwYXJhbWV0ZXIxPWZvbyZwYXJhbWV0ZXIyPWJhcg ==
Кодированный URL:
/ Ajax /? Запросить = YWN0aW9uPWRlbGV0ZSZwYXJhbWV0ZXIxPWZvbyZwYXJhbWV0ZXIyPWJhcg ==
Я не верю, что в JavaScript есть встроенная функция для кодирования в base64, но отнюдь не невозможно найти подходящий метод или написать свой собственный.
С запутанным / минимизированным клиентским JavaScript было бы довольно сложно определить, как сделать запрос «вручную».
Скрыть детали реализации
Существует ряд приемов, которым вы можете следовать, чтобы сделать ваше приложение менее уязвимым для атак из-за неправильного использования URL.
Начнем с URL-адреса: ajax / fetchDepartment.php? Sec = департаменты & 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-адреса, которые они делают.