xss攻击

我之前一直以为v-html默认会帮我们处理xss攻击,今天才知道vue官网也给出了友好提示只在可信内容上使用 v-html,永不用在用户提交的内容上

解决方法:参考处理v-html的潜在XSS风险 方法二:
  • 导入npm install xss --save
  • main.js全局文件:
import xss from 'xss';
Vue.prototype.xss = xss
  • 在vue.config.js中覆写html指令:
// 引入xss包并挂载到vue原型上
    // 参考:https://blog.csdn.net/lj1530562965/article/details/108790220
    config.module
      .rule('vue')
      .use('vue-loader')
      .loader('vue-loader')
      .tap(options => {
        options.compilerOptions.directives = {
          html(node, directiveMeta) {
            (node.props || (node.props = [])).push({
              name: 'innerHTML',
              value: `xss(_s(${directiveMeta.value}))`
            })
          }
        }
        return options
      })

测试数据:test_data

{"code": 0, "msg": "OK", "data": {"title": "跨站脚本测试(存储型XSS))(模糊测试-单payload测试)", "case_category_id": 2, "principle": "跨站脚本(cross-site scripting,XSS)是一种安全攻击,其中,攻击者在看上去来源可靠的链接中恶意嵌入译码。当有人点击链接,嵌入程序作为客户网络要求的一部分提交并且会在用户电脑上执行,一般来说会被攻击者盗取信息。", "created_by": "黄健06", "updated_by": "黄健06", "suggestions": "输入过滤校验,输出对参数进行html实体编码", "attachment": [], "test_step": "【测试目的】\r<p>评估目标是否存在XSS漏洞</p><p>【前置条件】</p>工具:burpsuite等<p></p>【测试步骤】<p>注入恶意指令代码到网页</p>1.正常登录业务系统,观察是否存在用户可输入数据,数据保存后直接在前端显示的地方(主要观察偏僻的业务功能,往往是研发人员疏忽的点)<p>2.直接从当前业务功能的文本框输入攻击payload/抓包然后将payload替换参数,保存</p>(测试数据中有攻击payload,界面控件输入及抓包篡改参数两个方式都需遍历payload测试)<p>3.观察是否出现弹窗现象或触发前端事件时出现弹窗现象</p>4.提取工具库中的XSSpayload 进行更多的模糊测试<p>5.如发现目标站点存在局部过滤,可参考https://www.w3school.com.cn/tags/html_ref_standardattributes.asp组合新payload进行测试验证</p><p>【预期结果】</p>无弹窗", "test_data": "<plaintext/onmouseover=prompt(2)><p></p>&lt;img src=x on_ onmouseover=alert(1)&gt;\\\\n&lt;/iframe&gt;<p></p>&lt;img src=x on_ onerror=&quot;alert(21)&quot; target=&quot;_self&quot;onmouseover=&quot;{alert(1)}&quot;title=&quot;eeeeee&quot;&gt;aaaa&lt;<p></p><img/src=\\\"x\\\"/on onerror=\\\"alert(21)\\\"><p></p><img/src=\"x\"/on_ onerror=\"alert(21)\"><p></p><p>\\u003cimg src=x onerror=alert(1)\\u003e</p>\\u3001u003cimg src=x onerror=alert(1)\\u3001u003e<p></p>\\x3cimg src=x onerror=alert(1)\\x3e<p></p>&#x3c;img src=x onerror=alert(1)&#x3e;<p></p>'\">\\u003<plaintext>\\u003script>prompt(3)\\u003/script><p></p>\\\"'&gt;\\n<iframe src=\\\"javascript:alert(1)\\\">\\n</iframe><p>\\\"'&gt;\\n<iframe src=\\\"javascript:alert(1)\\\">\\n</p>\\\"'&gt;\\n<script>prompt(3)</script>\\n<p></p>\"'>\\n<iframe src=\"javascript:alert(1)\">\\n</iframe><p>\"'><iframe src=\"javascript:alert(1)\"></iframe></p>\\\"'&gt;&lt;iframe src=\\\"javascript:alert(1)\\\"&gt;&lt;/iframe&gt;<p>\\\"'&gt;&lt;img src=x onerror=alert(1)&gt;&lt;/iframe&gt;</p><p>\"'><iframe src=\"javascript:alert(1)\"></iframe></p>\"'><iframe src=\"javascript:alert(1)\"></iframe><p></p><p>'\"><img src=x onerror=alert(1)></p><p>'\"><plaintext><script>prompt(3)</script></p>'\"><xmp><script>prompt(3)</script><p></p>'\">><marquee><img src=x onerror=confirm(1)></marquee>\"></plaintext\\></|\\><plaintext/onmouseover=prompt(2)><p><script>prompt(3)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>’–>\"></script></p><script>alert(document.cookie)</script>\"><p><img/id=\"confirm&lpar;4)\"/alt=\"/\"src=\"/\"onerror=eval(id)>’\"></p><p><IMG SRC=javascript:alert(1)></p><IMG SRC=JaVaScRiPt:alert(1)><p><IMG SRC=javascript:alert(&quot;1&quot;)></p><IMG SRC=`javascript:alert(\"RSnake says, 'XSS'\")`><p><a onmouseover=\"alert(document.cookie)\">xxs link</a></p><IMG “”\"><SCRIPT>alert(“XSS”)</SCRIPT>”><p></p>&lt;p&gt;&amp;#39;&amp;quot;&amp;gt;&amp;gt;&lt;img src=&quot;x&quot;/&gt;&amp;quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;script&gt;prompt(3)&lt;/script&gt;&lt;p&gt;@gmail.com&lt;/p&gt;&lt;isindex formaction=&quot;javascript:alert(/XSS/)&quot; type=&quot;submit&quot;/&gt;’–&amp;gt;&amp;quot;&amp;gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;script&gt;alert(document.cookie)&lt;/script&gt;&amp;quot;&amp;gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;img id=&quot;confirm&amp;amp;lpar;4)&quot; alt=&quot;/&quot; src=&quot;/&quot; onerror=&quot;eval(id)&quot;/&gt;’&amp;quot;&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;<p></p><img src=\"/resource/se/images/face/face24.gif\" onclick=alert(1) _src=\"/resource/se/images/face/face24.gif\"><p></p>&lt;p&gt;&amp;#39;&amp;quot;&amp;gt;&amp;lt;iframe src=javascript:alert(23333)&amp;gt;&amp;#39;&lt;/p&gt;<p></p>&lt;p&gt;&amp;#39;&amp;quot;&amp;gt;&amp;lt;img src=x onerror=alert(1)&amp;gt;&amp;#39;&lt;/p&gt;<p></p>&lt;p&gt;&amp;#39;&amp;quot;&amp;gt;&amp;lt;img src=x onmouseover=prompt(1)&amp;gt;&amp;#39;&lt;/p&gt;<p></p>&lt;p&gt;&amp;#39;&amp;quot;&amp;gt;&amp;lt;svg onload=prompt(1)&amp;gt;&amp;#39;&lt;/p&gt;<p></p><p>'\"><iframe src=javascript:alert(23333)>'</p><p>\"><iframe src=javascript:alert(2)><svg onmouseover=prompt(1)><\"</p><p>\\\"><iframe src=javascript:alert(2)><svg onmouseover=prompt(1)><\\\"</p><p>\"><IMG src=x onerror=alert(1);><svg onmouseover=prompt(1)><\"</p><p>\"'><IMG src=javascript:alert(1);><svg onmouseover=prompt(1)><\"", "created_uid": "259017", "case_type": "case_type_technology", "updated_time": "2020-10-16 12:06:30", "create_time": "2020-10-16 12:06:30", "id": 292, "case_code": "KYE-UCL-000060", "remark": "无", "updated_uid": "259017", "description": "可能在浏览器中执行脚本以劫持用户会话(cookie)、破坏网站、插入恶意内容、重定向用户、使用恶意软件劫持用户浏览器等。", "case_category_name": "应用安全"}}