在面试经常会被问到一个问题就是你了解前端安全吗?对于很多初中级前端程序员来说,项目中一般很难接触到或者是想不到这种问题,没有实践也就不好回答这个问题。小前哥现在教你如何回答面试官的这个问题,且不挖坑~~~
回答问题一般就是解决方案在前,原理在后,但在学习的时候我们先原理,后方案。所以我们下面开始了解前端安全中有哪些前端攻击?
一 .XSS攻击
xss 跨站脚本攻击(Cross-site scripting)是一种安全漏洞,攻击者可以利用这种漏洞在网站上注入恶意的客户端代码。当被攻击者登陆网站时就会自动运行这些恶意代码,从而,攻击者可以突破网站的访问权限,冒充受害者。
XSS 攻击可以分为3类:存储型(持久型)、反射型(非持久型)、DOM 型。
(哈哈,概念性的东西还是要看一下的,因为我们是面试回答,所以简单了解一下下~~)
下面说一个最简单最好记的一种XSS攻击:
eg:你的页面中有一个表单,表单中有一个<input type="text">,此时如果你的用户在页面中输入<script>alert('哈哈哈,乖乖叫爷爷')</script>,,在点击保存的时候,我们就会把input中的内容提交给后台,保存在数据库。在你展示表单的页面中,就会alert('哈哈哈,乖乖叫爷爷')。
防范机制 就是我们要给面试官说的重点,针对这种问题,实际项目会有两种解决方案
1.前端在提交之前对数据进行转译,将< & > / 等特殊字符进行转译,这样存数据库中的数据也就是你转译过的。这里注意jquery中append的用法。
2.对于这种问题,后端同学也可以做到过滤,如java可以在他们的filter中对我们提交的数据进行转移修改。这样的话前端同学就不用做任何工作了(此处有笑声~~)
3.保护好你的cookie。cookie的HttpOnly属性,加上了这个属性的cookie字段,js是无法进行读写的,这样能有效的防止XSS攻击。也可将secure属性设置为true,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。
二.CSRF攻击
CSRF(Cross-site request forgery)跨站请求伪造。攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。
防范机制
1.合适使用post和get。提交 Post 判断referer
HTTP请求中有一个referer的报文头,用来指明当前流量的来源参考页。如果我们用post就可以将页面的referer带入,从而进行判断请求的来源是不是安全的网站。但是referer在本地起的服务中是没有的,直接请求页面也不会有。这就是为什么我们要用Post请求方式。直接请求页面,因为post请求是肯定会带入referer,但get有可能不会带referer。
Token简单来说就是由后端生成的一个唯一的登陆态,并传给前端保存在前端,每次前端请求时都会携带着Token,后端会先去解析这个Token,看看是不是后台给我们的,已经是否登陆超时,如果校验通过了,才会同意接口请求。token的传值有三种方式可以完成:
1>在请求头header中添加,这需要前后端制定同一个传值规则;
2>从cookie中获取。
3>在请求的时候直接以参数的形式传值给后端。
总结:对于回答面试官的问题,我们可以从两方面去回答,一是XSS攻击,解决方案特殊字符的转译、cookie的安全设置等,二是CSRF,解决方案为使用post和利用token(后端解决)。总之如果你对安全的知识了解的不是很深入,可以把解决方案说出来,然后话题转移在后端解决方案上,学会完美避开话题,让面试官觉得你对这个了解的,以后让你做你知道如何做就行。
(对于面试,前端安全问题,小前哥就帮你到这了~~~)