Что означает Каноническое представление и его потенциальная уязвимость для веб-сайтов

StackOverflow https://stackoverflow.com/questions/1167371

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top