Я передаю HTML-код, созданный пользователем, в базу данных, и я пытаюсь убедиться, что никакого вредоносного кода не передается. Одним из шагов, которые я предпринимаю, является запуск кода через класс HTML_Safe груши для удаления уязвимой разметки. Однако я заметил, что атрибут имени поданных элементов удаляется. Разумеется, когда вы смотрите на исходный код, name
является одним из немногих атрибутов, внесенных по умолчанию в черный список:
http://pear.php.net/package/HTML_Safe/docs/latest/HTML_Safe/HTML_Safe.html#var$attributes
В чем опасность, позволяющая пользователям передавать значения для name
? Как значения для name
могут использоваться для гнусных целей? Есть предположения? Если нет, у меня возникает соблазн изменить черный список.
В элементах формы HTML атрибут name
используется как идентификатор. Поэтому, если вы разрешаете name
тогда кто-то может переопределить ваши атрибуты name
HTML (которые вы, возможно, использовали), с одним из своих. Первое найденное совпадающее name
часто используется для обработки Javascript или на стороне сервера.
Это позволит кому-то использовать любую возможную обработку Javascript или серверной формы, которую вы можете использовать, ссылаясь на найденный первый атрибут совпадающего name
.
Это не просто элементы формы, которые могут использовать name
, но они были бы наименее безопасными.
Другая проблема с переопределением заключается в том, что вы используете Javascripts getElementsByName
в любой из ваших функций (как указано ниже), вы можете получить функцию, которая не делает то, что вы ожидаете.
Изменить: некоторые исправления и примечание о проблеме getElementsByName
(как указано ниже).