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

Другие ответы объясняют почему, но вот как.

Учитывая случай Random:

Random r = new Random(-229985452)

Первые 6 чисел, которые генерирует r.nextInt(27), являются:

8
5
12
12
15
0

и первые 6 чисел, которые генерирует r.nextInt(27) даны Random r = new Random(-147909649):

23
15
18
12
4
0

Затем просто добавьте эти числа к целочисленному представлению символа ` (который равен 96):

8  + 96 = 104 --> h
5  + 96 = 101 --> e
12 + 96 = 108 --> l
12 + 96 = 108 --> l
15 + 96 = 111 --> o

23 + 96 = 119 --> w
15 + 96 = 111 --> o
18 + 96 = 114 --> r
12 + 96 = 108 --> l
4  + 96 = 100 --> d
9
задан Lance Roberts 19 February 2013 в 04:00
поделиться

2 ответа

Канонизация - это процесс, с помощью которого вы берете ввод, такой как имя файла или строку, и превращаете его в стандартное представление.

Например, если ваше веб-приложение разрешает только доступ к файлам в C: \ sites \ mydomain, то обычно любой ввод, относящийся к именам файлов, канонизируется как физический прямой путь, а не тот, который использует относительные пути. Если вы хотите открыть C: \ sites \ mydomain \ example \ example.txt, одним входом в эту функцию может быть example \ example.txt. Трудно решить, выходит ли это за пределы вашего веб-сайта, поэтому функция канонизации будет смотреть на каталог приложения и менять этот относительный путь на физический, C: \ sites \ mydomain \ example \ example.txt. Очевидно, это легче проверить, поскольку вы просто выполняете сравнение строк в начале пути к файлу.

Для входных данных HTML вы берете такие входные данные, как% 20, и канонизируете их путем некодирования, чтобы это превратилось в пробел. Это хорошая идея, поскольку существует множество различных способов кодирования, канонизация означает, что вы будете проверять только декодированную строку, а не пытаться охватить все варианты кодирования.

В основном вы вводите логически эквивалентный ввод и конвертируете их в стандартную форму, которую вы затем можете действовать.

вместо того, чтобы пытаться охватить все варианты кодирования.

По сути, вы вводите логически эквивалентные данные и конвертируете их в стандартную форму, с которой вы можете действовать.

вместо того, чтобы пытаться охватить все варианты кодирования.

По сути, вы вводите логически эквивалентные данные и конвертируете их в стандартную форму, с которой вы можете действовать.

9
ответ дан 4 December 2019 в 21:50
поделиться

Канонический (я думаю) означает, что консольный ввод является «типичным поведением». Неканонический означает, что ввод нестандартен и требует специальных знаний, таких как поведение ввода «vi» в Linux.

-4
ответ дан 4 December 2019 в 21:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: