-
Notifications
You must be signed in to change notification settings - Fork 3
Description
Web开发之浏览器安全问题
XSS
概述
XSS(Cross Site Scripting)是跨站脚本攻击,为了区分CSS,所以缩写为XSS。XSS攻击方式是往Web页面插入恶意的 JavaScript 代码,当用户浏览网页的时候,插入的代码就是被执行,从而达到攻击的目的。
XSS 分为持久型与非持久型,区别是前者写入数据库,后者修改用户代码。
比如搜索的文本框,输入一些 JavaScript 代码,点击搜索,代码就会被执行,达到攻击的目的。
<script>alert(document.cookie)</script>
在文本框中输入以上代码,然后点击提交,就会把用户的cookie弹出来。
防范
-
HttpOnly 浏览器禁止页面的Javascript访问带有HttpOnly属性的cookie。
-
只允许用户输入我们期望的数据。如消费金额框只能输入数字和小数点。
-
对数据进行加密处理。
-
输入检查(XSS Filter)
让一些基于特殊字符的攻击失效。常见的Web漏洞如XSS、SQLInjection等,都要求攻击者构造一些特殊字符。
CSRF
概述
CSRF(Cross-site request forgery)是跨站请求伪造。攻击者会虚构一个后端请求地址,诱导用户通过某些途径发送请求。通过伪装来自受信任用户,在受信任的网站进行请求,盗取信息。其实就是攻击者盗用了受害者的身份,以受害者的名义向网站发送恶意请求。
与XSS区别:XSS利用站点内的信任用户,CSRF是通过伪装来自受信任用户。
攻击的思想
图片来自:CSRF攻击原理及防御
参考上图,可以总结,完成一次CSRF攻击,必须满足两个条件:
-
用户登录受信任网站A,并且在本地生成Cookie。
-
在不登出网站A的情况下,访问危险网站B。
防范
-
验证 HTTP Referer 字段, 验证请求的来源点
利用HTTP头中的Referer判断请求来源是否合法,Referer首部包含了当前请求页面的来源页面的地址。
-
验证码
CSRF攻击过程中,用户在不知情的情况下构造了网络请求,添加验证码后,强制用户必须与应用进行交互。
-
在请求地址中添加 token 并验证
在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
-
利用cookie的 SameSite
SameSite有3个值:Strict, Lax和None
- Strict,浏览器会完全禁止第三方cookie。
- Lax,相对宽松一些,在跨站点的情况下,从第三方站点链接打开和从第三方站点提交 Get方式的表单这两种方式都会携带Cookie。但如果在第三方站点中使用POST方法或者通过 img、Iframe等标签加载的URL,这些场景都不会携带Cookie。
- None,任何情况下都会发送 Cookie数据。
XSRF
当网站同时存在XSS和CSRF漏洞时,XSS可以模拟客户端浏览器执行任意操作,在XSS攻击下,攻击者完全可以请求页面后,读取页面内容中的Token值,然后再构造出一个合法的请求。
ClickJacking
概述
点击劫持(ClickJacking)是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。
防范
X-Frame-Options HTTP响应头是用来给浏览器指示允许一个页面能否在<frame>、<iframe>、<object>
中展现的标记。
有三个可选的值:
- DENY:浏览器会拒绝当前页面加载任何frame页面(即使是相同域名的页面也不允许)。
- SAMEORIGIN:允许加载frame页面,但是frame页面的地址只能为同源域名下的页面。
- ALLOW-FROM:可以加载指定来源的frame页面(可以定义frame页面的地址)。