Я пишу статическую страницу для инструмента: пользователь вставляет код base64, и он преобразуется в открытый текст. Не то чтобы это имело значение, но поскольку контекст криптографический, я хочу предотвратить XSS.
Я заметил, что document.getElementById("myTextarea").value
позволяет вам изменять/устанавливать содержимое текстовой области без его появления в HTML-коде (даже в качестве атрибута), и в отличие от .innerHTML
или атрибутов я ничего не мог с .value
сделать.
Так действительно ли .value
безопасен? И есть ли «более простой» HTML-элемент, который имеет похожее поведение?
Возможно, я плохо гуглю или просто ленив, но я ничего не нашел по этому поводу. («Как мне это погуглить?»)
Я знаю о проверке и кодировании, но тогда я не могу передать выходные данные прямо в обратный преобразователь, чтобы получить исходный код base64.
Вопросы:
.value
XSS?Обновлено: удалено (XSS работает в текстовой области InnerHTML, как было задано и получено ответами в других сообщениях StackOverflow).
Да, это на мне. Их нет. .innerHTML
textarea ведет себя как .textContent
. Должно быть, я каким-то образом нашел старую публикацию о библиотеке, которая по какой-то причине сделала это возможным.
Итак, на первый вопрос ответ — да. Когда вы устанавливаете свойство .value
текстовой области, содержимое будет обрабатываться как обычный текст. Следовательно, браузер не будет интерпретировать или выполнять содержимое как код.
Для аналогичного элемента HTML, который также обрабатывает входной контент как обычный текст, я использую только тег input
с атрибутом type = "text"
. Но поскольку вы вставляете текст в формате Base64, который часто бывает очень длинным. Тег input
, возможно, не лучший вариант, чем тег textarea
. Хотя вы можете использовать CSS, чтобы он выглядел как textarea
или выглядел лучше, когда вводится длинный текст.
Если вы хотите отобразить или обновить контент, лучше использовать .textContent
. Согласно документу MDN:
(https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent)
Использование .textContent
может предотвратить XSS-атаки.
введите сюда описание изображения
Спасибо. Я провел некоторое тестирование. TextContent автоматически кодирует все подозрительные символы с помощью кодировки HTML (например, <
будет отображаться как <
в исходном коде). Это было трудно понять, потому что инструменты разработчика показывают как закодированные, так и не закодированные одинаково. Итак, .textContent защищен XSS и является частью его предполагаемого дизайна.
Разрешенным содержимым для текстовой области является текст. Итак, вы уверены, что «XSS работает в текстовой области InnerHTML»? Можете ли вы дать ссылку на другие сообщения StackOverflow, на которые вы ссылаетесь в своем вопросе.