Что означает Каноническое представление и его потенциальная уязвимость для веб-сайтов
-
19-09-2019 - |
Вопрос
Я поискал в Google значение канонического представления и обнаружил документы, которые совершенно слишком загадочны.Кто-нибудь может дать краткое объяснение канонического представления, а также каковы некоторые типичные уязвимости веб-сайтов к атакам на каноническое представление?
Решение
Канонизация - это процесс, с помощью которого вы принимаете входные данные, такие как имя файла или строка, и превращаете их в стандартное представление.
Например, если ваше веб-приложение разрешает доступ только к файлам в разделе C:\websites\mydomain тогда обычно любой ввод, ссылающийся на имена файлов, канонизируется как физический прямой путь, а не тот, который использует относительные пути.Если вы хотите открыть C:\websites\mydomain\example\example.txt одним из входных данных в эту функцию может быть example\example.txt.Трудно определить, выходит ли это за пределы вашего веб-сайта, поэтому функция канонизации просматривает каталог приложения и изменяет этот относительный путь на физический, C:\websites\mydomain\example\example.txt.Очевидно, что это проще проверить, поскольку вы просто выполняете сравнение строк в начале пути к файлу.
Для входных данных HTML вы берете входные данные типа %20 и канонизируете их путем декодирования, так что это превратится в пробел.Это хорошая идея, поскольку количество различных способов кодирования велико, канонизация означает, что вы будете проверять только декодированную строку, а не пытаться охватить все варианты кодирования.
По сути, вы принимаете входные данные, которые логически эквивалентны, и преобразуете их в стандартную форму, с которой затем можете действовать.
Другие советы
Следующее объяснение взято из найденного раздела "Безопасность приложений и разработка" здесь:
3.11 Каноническое представление Проблемы с каноническим представлением возникают когда имя ресурса используется для управления доступом к ресурсу.Существует несколько способов представления имен ресурсов в компьютерной системе.Приложение, полагающееся исключительно на имя ресурса для управления доступом, может неправильно выполнить управление доступом решение, если имя указано в нераспознанном формате.
Например, в Windows, notepad.exe может быть представлено следующими комбинациями имени файла и пути:
C:\Windows\System32 otepad.exe
%SystemRoot%\System32 otepad.exe
\?\C:\Windows\System32 otepad.exe
\хост\c$\Windows\system32 otepad.exe
Приложение, пытающееся ограничить доступ к файлу исключительно на основании пути и имени файла, может неправильно предоставить или запретить доступ.Та же проблема может применяться к другим именованным ресурсам в системе, таким как жесткие и программные ссылки, URL, канал, общий ресурс, каталог, имя устройства или внутри данных файлы, если используется альтернативная кодировка с данными используются механизмы.
Следующие элементы могут указывать на потенциальные проблемы с каноническим представлением в приложении:
• Контроль доступа решения, основанные на имени ресурса.
• Неспособность привести имя ресурса к его канонической форме перед использованием.
В чтобы свести к минимуму канонические проблемы с представлением в приложении, реализуйте следующие процедуры:
• Не полагайтесь исключительно на имена ресурсов для управления доступом.
• Если использование имен ресурсов для управления доступом, проверьте имена, чтобы убедиться, что они находятся в правильном формате;отклонить все имена, не соответствующие заведомо хорошим критериям.
• Используйте основанные на операционной системе механизмы контроля доступа, такие как разрешения и списки управления доступом.
Канонизация означает сведение полученных данных к их простейшей форме, она используется для проверки входных данных.
Канонический (я думаю) означает, что консольный ввод - это "типичное поведение".Неканонический означает, что ввод является нестандартным и требует специальных знаний, таких как поведение "vi" при вводе в Linux.