предисловие
Недавно я видел статью, в статье говорилось, что поле ввода былоатака путем внедрения кодаОпасность, я сделал небольшой пример и обнаружил, что есть такая ситуация.
Пример
Давайте сначала рассмотрим небольшой пример, простейшую функцию сообщения, введите информацию в поле ввода, а затем вставьте информацию на страницу:
эффект страницы
ключевой код
<body>
<div id="content"></div>
<input id='input'>
<input type="button" id='button' value="提交">
</body>
<script>
const btn = document.getElementById('button');
const myInput = document.getElementById('input');
const content = document.getElementById('content');
btn.onclick = ()=> {
content.innerHTML = myInput.value
};
</script>
Окно ввода кода Несколько способов, которые могут привести к атаке
Внедрение HTML-кода в поле ввода
Введите в поле ввода<h1>哈哈,你的页面结构被我破坏了</h1>, а затем отправить, эффект будет следующим:
<script>Поле ввода этикетки
Введите в поле ввода<script> alert(0); </script>, затем отправьте.
Мы обнаружим, что нет всплывающего окна, здесь нет исполненияJavaScriptПричина проведения процедуры:HTML 5не реализованоinnerHTMLвставлен<script>теги, но вставленные фрагменты видны в структуре кода.
Другие не проходят<script>Выполнение этикеткиJavaScriptКод программы вводится в поле ввода
Потерпеть неудачу<script>Выполнение этикеткиJavaScriptПо-прежнему существует риск подвергнуться атаке, как в примере, приведенном в MDN:<img src='x' onerror='alert(1)'>, мы можем видеть, что программа является исполняемой после ввода:
охранять от
Поскольку поле ввода может быть атаковано, мы должны принять меры предосторожности.VueЗа нас взяли лучшую защиту. если не используетсяVue, есть и подходящие решения.
Принцип предотвращения Vue
VueПри динамической вставке элемента метка<,>и т. д. преобразуются в escape-символы<,>ждать, чтобы избежатьJavaScriptвыполнение программы с использованиемVueПосле вставки кода через поле ввода код вставленной страницы будет экранирован следующим образом:
Без предосторожностей код для вставки страницы выглядит следующим образом:
Собственные средства защиты JavaScript
мы можем использовать иVueТакой же метод предосторожности<,>,&,',"и другие символы заменены escape-символами, чтобы избежать рисков, которые используются здесьzhangxiangliangодноклассники«30 секунд в день ⏱ Все арестованы»Метод, написанный в статье для обработки:
// 将输入框的字符串通过正则,将符号替换成转义字符
const escapeHTML = str =>
str.replace(/[&<>'"]/g, tag => ({
'&': '&',
'<': '<',
'>': '>',
"'": ''',
'"': '"'
}[tag] || tag));
Суммировать
Хотя есть некоторые способы атаки, которые могут загромождать страницу после редактирования в консоли, если у нас есть способы избежать рисков, то лучше не доставлять неприятностей работе и компании.
использованная литература
30 секунд в день ⏱ Арестуем вместе:nuggets.capable/post/684490…
Элемент MDN.innerHTML:developer.Mozilla.org/this-cn/docs/…