Я пишу статическую страницу для инструмента: пользователь вставляет код base64, и он преобразуется в открытый текст. Не то чтобы это имело значение, но поскольку контекст криптографический, я хочу предотвратить XSS.
Я заметил, что document.getElementById("myTextarea").value позволяет вам изменять/устанавливать содержимое текстовой области без его появления в HTML-коде (даже в качестве атрибута), и в отличие от .innerHTML или атрибутов я ничего не мог с .value сделать.
Так действительно ли .value безопасен? И есть ли «более простой» HTML-элемент, который имеет похожее поведение?
Возможно, я плохо гуглю или просто ленив, но я ничего не нашел по этому поводу. («Как мне это погуглить?»)
Я знаю о проверке и кодировании, но тогда я не могу передать выходные данные прямо в обратный преобразователь, чтобы получить исходный код base64.
Вопросы:
.value XSS?Обновлено: удалено (XSS работает в текстовой области InnerHTML, как было задано и получено ответами в других сообщениях StackOverflow).
Да, это на мне. Их нет. .innerHTML textarea ведет себя как .textContent. Должно быть, я каким-то образом нашел старую публикацию о библиотеке, которая по какой-то причине сделала это возможным.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Итак, на первый вопрос ответ — да. Когда вы устанавливаете свойство .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, на которые вы ссылаетесь в своем вопросе.