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/xss
5.csp – http 的头
content security policy
内容安全策略,用于指定哪些内容可执行
类型
Child-src 页面子内容 iframe
Connect-src ajax
Default-src fallback 所有的内容
Font-src
Frame-src
Img-src
Manifest-src webapp
Media-src audio/video
Object-src 插件
Script-src
Style-src
Worker-src serviceWorker
配置选项 – 那些可信任那些不可信任
<host-source> 主机域名
<scheme-source> 协议
Self 同域 – 引入的资源
Unsafe-inline 直接插入页面的内容
Unsafe-eval
none 不信任任何内容
Nonce-<base64-value> 指定一次性凭证 凭证匹配时可执行
<hash-source>
Stric-dynamic 引入的后续网址是否
demo 没有指定的全部不信任, 只信任同源的引入文件,对于直接插入的不信任
CSRF