XSS定义:Cross site本网站运行了来自其他网站的代码数据变成了程序XSS实例:页面上输出query参数页面上显示搜索框脚本引入外部js资源富文本 - 写日志 - 富文本 - 塞入的 - 加入scrpit在线商城 - 订单信息input消息的填写 - 订单信息流入后台 - 获取后台的管理员信息和后台地址XSS危害:获取页面数据获取cookie document.cookie劫持前端逻辑发送请求攻击分类:XSS攻击点:包含用户输入行为HTML节点内容1.HTML属性 红框内为输入内容,导致属性标签闭合 添加了新的属性2.javascript代码 - 强制标签闭合 - 搜索3.富文本:富文本自带HTML防御方法1.浏览器自带 X-XSS-Protection 取值: 0关闭 1默认(开启) 1后面带参数 - 拦截后自动发送到该网址上 限制:只拦截反射类型注入 - 只对HTML属性和节点内容有用demo(koa)2.HTML节点内容/属性 - 转义成HTML实体不被浏览器解析正常显示< > 内容“ ‘ 是属性3.javascript代码JSON.stringfy - 所有的单引号/双引号都会被转义4.富文本 黑名单 - 正则替换 - 因为变形有很多,只能阻挡一部分 白名单 - 在白名单的HTML允许写入 - 实现复杂 - 把html解析成树状结构 - 依次分析过滤每个节点的name,attr,过滤掉不在白名单内的属性和tag 使用npm包 - xss自动实现 https://www.npmjs.com/package/xss5.csp - http的头content security policy内容安全策略,用于指定哪些内容可执行类型Child-src 页面子内容 iframeConnect-src ajaxDefault-src fallback 所有的内容Font-srcFrame-srcImg-srcManifest-src webappMedia-src audio/videoObject-src 插件Script-src Style-srcWorker-src serviceWorker配置选项 - 那些可信任那些不可信任<host-source> 主机域名<scheme-source> 协议Self 同域 - 引入的资源Unsafe-inline 直接插入页面的内容Unsafe-eval none 不信任任何内容 Nonce-<base64-value> 指定一次性凭证 凭证匹配时可执行<hash-source>Stric-dynamic 引入的后续网址是否demo没有指定的全部不信任,只信任同源的引入文件,对于直接插入的不信任CSRF