面试被问到了前端安全方面的,然后一问三不知,现在先总结一下概念性的吧。
XSS攻击
什么是XSS
XSS全称跨站脚本攻击,是指恶意的web用户将代码植入到网站提供给其他用户使用的页面中,使得在渲染页面时执行了预期外的代码。
XSS的攻击方式
- 反射型攻击
将XSS代码作为url的参数提交给服务器,服务器返回的响应中包含该XSS代码,浏览器解析执行该代码。
举个例子,通过这种方式可以获取网页cookie中的信息
$.ajax({
url:"http://localhost:3000?keyword=<script>alert(document.cookie);</script>",
type:"GET"
});
- 存储型攻击
将XSS代码发送给服务器,存在服务器的数据库或内存中,下次请求页面会加载XSS代码 - DOM XSS
恶意XSS代码在客户端本地执行
XSS的危害
- 盗取用户信息
- 流量劫持(定位到其他网站)
- Dos攻击
防御XSS
- 过滤危险节点:script,img,style,link,frame,iframe
- 对用户的数据进行编码处理
- 对cookie设置http-only,这样js脚本无法获得document.cookie
CSRF攻击
CSRF全称跨站请求伪造,是指非授权用户利用授权用户的浏览器取得目标站点的信任,向目标站点发送http请求
防范措施
- 验证码
要求用户填写验证码,确保浏览器发送的请求经过用户确认,问题是用户的所有请求不能都填验证码 - Referer Check
用来检查请求是否来自合法的源 - token
用户访问页面时服务端会生成一个token,放在用户的session或cookie中,用户请求时会附带上token,服务端收到请求会监测token是否一致,这种方法要注意token的有效性