We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
常见应用场景:论坛发帖、商品评论、用户私信等
常见应用场景:通过 URL 传递参数的场景,如网站搜索、跳转
DOM 型是浏览器端的漏洞,可能是以下情况:
总而言之,对于 DOM 型 XSS 攻击,当执行用户输入代码时,以及将用户输入拼接到 HTML 时,要时刻注意
(1) 采用纯前端渲染
(2) 拼接 HTML 时,要对 HTML 进行充分转义(利用一些转义库)
(1) 将用户输入插入 HTML 或拼接 js 执行时,要进行编码,将一些特殊字符转义:
& -> & <-> < > -> > "-> " ' -> ' / -> /
(2) 对于 a 标签的 href 等外链请求,添加白名单进行过滤
可以设置在响应头,也可以设置在 meta 标签中,示例如下:
允许网页应用的用户在他们自己的内容中包含来自任何源的图片, 但是限制音频或视频需从信任的资源提供者(获得),所有脚本必须从特定主机服务器获取可信的代码.
// 响应头 Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
CSRF(Cross-site request forgery)跨站请求伪造:受害者进入第三方网站,第三方网站中,偷偷向被攻击网站发送请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
攻击前提:
验证请求头 Origin、Referrer
Origin、Referrer
这两个域名在请求的时候浏览器会自动带上,不能由前端随意修改
需要注意的是:
Origin 在 IE11 中不存在,在 302 重定向中也不存在,Referrer 可以被前端隐藏不携带,如果不存在这两个请求头时,需要利用其它方式验证
当访问源是外域时,直接拒绝访问,但要注意的是,需要过滤掉 html 页面请求,因为当请求来自搜索引擎结果页面时,也是外域访问,会被当做 CSRF 请求。
后端根据秘钥生成 token,当用户登录的时候,将这个 token 发给前端,要求容易遭受 CSRF 攻击的请求都必须携带这个 token。注意,这个 token 不能用 cookie 发给后端,这样就形同虚设了。
后端收到后解开 token,如果合法并且没过期说明该请求是用户的正常请求
缺点:增加了服务端的计算压力,同时前端大量请求都需要携带 token
对于一些安全性需求高的操作,比如转账等,要求用户输入验证码或密码后才允许操作
后端返回 cookie 的时候设置 Samesite Cookie 属性,如下:
Samesite Cookie
Set-Cookie: foo=1; Samesite=Strict Set-Cookie: bar=2; Samesite=Lax
Samesite=Strict:对于所有跨域请求,一律不携带这个 cookie
Samesite=Strict
Samesite=Lax:如果打开了新页面或者改变了当前页面,并且该请求是个 GET 请求,则允许携带该 cookie
Samesite=Lax
缺点:
Samesite
The text was updated successfully, but these errors were encountered:
No branches or pull requests
xss 攻击
一、xss 攻击分类
1. 存储型
常见应用场景:论坛发帖、商品评论、用户私信等
2. 反射型
常见应用场景:通过 URL 传递参数的场景,如网站搜索、跳转
3. DOM 型
DOM 型是浏览器端的漏洞,可能是以下情况:
总而言之,对于 DOM 型 XSS 攻击,当执行用户输入代码时,以及将用户输入拼接到 HTML 时,要时刻注意
二、XSS 攻击防范
1. 防范反射型、存储型 XSS
(1) 采用纯前端渲染
(2) 拼接 HTML 时,要对 HTML 进行充分转义(利用一些转义库)
2. 防范 DOM 型 XSS
(1) 将用户输入插入 HTML 或拼接 js 执行时,要进行编码,将一些特殊字符转义:
(2) 对于 a 标签的 href 等外链请求,添加白名单进行过滤
其他防范措施
可以设置在响应头,也可以设置在 meta 标签中,示例如下:
允许网页应用的用户在他们自己的内容中包含来自任何源的图片, 但是限制音频或视频需从信任的资源提供者(获得),所有脚本必须从特定主机服务器获取可信的代码.
CSRF
一、CSRF 攻击前提
CSRF(Cross-site request forgery)跨站请求伪造:受害者进入第三方网站,第三方网站中,偷偷向被攻击网站发送请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
攻击前提:
二、防范措施:
1. 同源验证
验证请求头
Origin、Referrer
这两个域名在请求的时候浏览器会自动带上,不能由前端随意修改
需要注意的是:
Origin 在 IE11 中不存在,在 302 重定向中也不存在,Referrer 可以被前端隐藏不携带,如果不存在这两个请求头时,需要利用其它方式验证
当访问源是外域时,直接拒绝访问,但要注意的是,需要过滤掉 html 页面请求,因为当请求来自搜索引擎结果页面时,也是外域访问,会被当做 CSRF 请求。
2. CSRF token 验证
后端根据秘钥生成 token,当用户登录的时候,将这个 token 发给前端,要求容易遭受 CSRF 攻击的请求都必须携带这个 token。注意,这个 token 不能用 cookie 发给后端,这样就形同虚设了。
后端收到后解开 token,如果合法并且没过期说明该请求是用户的正常请求
缺点:增加了服务端的计算压力,同时前端大量请求都需要携带 token
3. 验证码 / 密码
对于一些安全性需求高的操作,比如转账等,要求用户输入验证码或密码后才允许操作
4. Samesite Cookie
后端返回 cookie 的时候设置
Samesite Cookie
属性,如下:Samesite=Strict
:对于所有跨域请求,一律不携带这个 cookieSamesite=Lax
:如果打开了新页面或者改变了当前页面,并且该请求是个 GET 请求,则允许携带该 cookie缺点:
Samesite
不支持子域,也就是说子域无法使用设置了Samesite
的 cookie,这可能导致用户在主域登录后,前往子域页面仍需要重新登录The text was updated successfully, but these errors were encountered: