Безопасен ли межсайтовый скриптинг (XSS) <textarea>.value?

Я пишу статическую страницу для инструмента: пользователь вставляет код base64, и он преобразуется в открытый текст. Не то чтобы это имело значение, но поскольку контекст криптографический, я хочу предотвратить XSS.

Я заметил, что document.getElementById("myTextarea").value позволяет вам изменять/устанавливать содержимое текстовой области без его появления в HTML-коде (даже в качестве атрибута), и в отличие от .innerHTML или атрибутов я ничего не мог с .value сделать.

Так действительно ли .value безопасен? И есть ли «более простой» HTML-элемент, который имеет похожее поведение?

Возможно, я плохо гуглю или просто ленив, но я ничего не нашел по этому поводу. («Как мне это погуглить?»)

Я знаю о проверке и кодировании, но тогда я не могу передать выходные данные прямо в обратный преобразователь, чтобы получить исходный код base64.

Вопросы:

  • Безопасно ли .value XSS?
  • Существует ли «более простой» элемент HTML с похожим поведением?

Обновлено: удалено (XSS работает в текстовой области InnerHTML, как было задано и получено ответами в других сообщениях StackOverflow).

Разрешенным содержимым для текстовой области является текст. Итак, вы уверены, что «XSS работает в текстовой области InnerHTML»? Можете ли вы дать ссылку на другие сообщения StackOverflow, на которые вы ссылаетесь в своем вопросе.

Jaromanda X 19.07.2024 06:04

Да, это на мне. Их нет. .innerHTML textarea ведет себя как .textContent. Должно быть, я каким-то образом нашел старую публикацию о библиотеке, которая по какой-то причине сделала это возможным.

vector001 19.07.2024 15:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, на первый вопрос ответ — да. Когда вы устанавливаете свойство .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 (например, < будет отображаться как &lt; в исходном коде). Это было трудно понять, потому что инструменты разработчика показывают как закодированные, так и не закодированные одинаково. Итак, .textContent защищен XSS и является частью его предполагаемого дизайна.

vector001 19.07.2024 14:59

Другие вопросы по теме