@
Forviler 针对你当前的场景:
document.getElementById('rf').innerHTML= `<img/src=1 >` ; edge 下会显示为文本
document.getElementById('rd').innerHTML = `<img/src=1 >`; edge 下显示为 标签
假如攻击者的代码为:<img/src=1 >,,你在代码中转为<img/src=1 >后,这就是消毒的操作。浏览器页面中会显示<img/src=1 >,但其实浏览器把显示的<img/src=1 >当成<img/src=1 >处理。这么一来,浏览器就不会真的把这串代码当成 img 标签进行渲染了。这样既能够不破坏用户输入的数据,又能够保障代码的安全(不被解析成 js 代码)。
document.getElementById('rd').innerHTML = `<img/src=1 >`; edge 下显示为 标签
这个就是危险的。假如攻击者的攻击代码为:<img/src=1 onerror="alert(xss)">,,由于没有进行编码,这个代码会被当成 js 处理,,浏览器会加载图片,但由于 url 不存在,图片加载失败,触发 onerror 事件,执行 alert 弹窗代码。当然这里仅仅是测试,alert 并不具备危害。但是如果 alert 是窃取 cookie 的代码,这可就危险了。