一、前言
在日常开发中往往我们很容易忽略安全方面的问题,或者不涉及到安全方面的问题,又或者在框架层面帮我们做了安全处理,了解安全问题有利于保证我们的应用的安全性,并且在遇到安全问题时,有理可据,接下来简单聊一下安全方面的问题。
二、为什么需要做安全防御
1、用户身份信息被盗取(获取cookies)
2、用户密码泄露
3、用户资料被盗取
4、网站数据库泄露
三、XSS攻击
1、什么是XSS攻击?
XSS攻击中文译为跨站脚本攻击(cross-Site scripting),个人理解就是通过网站漏洞往网站插入恶心脚本代码或者存储脚本代码来实现对网站的攻击和非常信息获取
2、XSS攻击的途径?
(1)、通过可输入域的恶意脚本代码提交实现恶心脚本被存储在数据库
(2)、利用网站解析url的机制,构造恶意的网站URL传播给用户来实现脚本攻击
3、预防XSS措施?
(1)、在服务端渲染中,需要对html模板进行全量的字符转义,在Vue/React技术栈中的纯前端渲染中,禁止v-html
/dangerouslySetInnerHTML
功能
(2)、在http请求头中加入Content-Security-Policy
(3)、HTTP-only:禁止JavaScript读取网站的cookie
四、CSRF攻击
1、什么是CSRF攻击?
CSRF中文译为跨站请求伪造,不说那么多,说白了就是利用浏览器在访问目标网站时,会自动带上浏览器中已存储的同源的cookie去请求,正式利用这一自动带上登录态的特性来实现对目标网站的攻击
2、CSRF攻击的途径?
假设张三登录了淘宝网站,然后李四是一名攻击者,它编写了一个长得和淘宝一样的网站B,并将网站B的链接发送给张三,张三点开链接进入到李四的网站B,此时网站B会发送一个请求taobao.com/getUserInfo,因为此时浏览器本地已经存储了domain为taobao.com的cookie,所以虽然在网站B发生taobao.com/getUserInfo,也会自动带上浏览器的cookie去请求并拿到最终的用户信息,实现窃取用户信息的最终目的
3、预防CSRF措施?
(1)、阻止不明外域的访问:同源检测(请求头中的referrer)、对cookie设置sameSite属性
(2)、双重token验证:发送请求时,验证只有在网站本站点才能获取到的token,csrf token等
五、点击劫持
1、什么是点击劫持?
对点击劫持分开理解就是:第一点需要点击、第二点劫持哈哈哈
2、点击劫持的途径? (iframe设置透明度为0)
黑客李四向用户发送自己的网站B,引导用户点击网站B中的按钮Button领取红包,实则点击的并不是Button,而是网站B中的Iframe src为taobao.com页面中的获取用户信息的按钮,因为Iframe标签被设置opacity:0所以用户看不见
3、解决点击劫持的措施?(禁用网站被第三方网站通过iframe标签引入)
对被攻击网站(目标网站)发生请求回来的响应头设置x-frame-options:SAMEORIGIN,意思就是该网站只有同域才生被iframe引入,也就是说设置了这个属性之后,在李四的网站B中设置iframe src=”https://juejin.cn/post/taobao.com”之后,iframe是无法通过iframe从taobao.com这个域获取页面的,从而从根本上解决了这个问题
六、传输安全
说到传输安全,我们不得不提到中间人攻击,那什么是中间人攻击呢?
1、中间人攻击(Man-in-the-middle Attack):我们知道我们在浏览器输入框输入网址之后,请求要经过层层网络和设备等许多个节点上,在任意节点上都可能会发生被请求被劫持下来的可能,比如张三在自家的电脑上访问taobao.com请求发送到taobao.com服务器,在这个网络链路中间张三的请求被黑客李四给拦截下来了,之后无论张三在taobao.com进行登录、支付等操作都会先经过黑客李四的服务器,黑客李四就可以对张三无法无天了哈哈哈哈,自行脑补~。
2、那如何解决中间人攻击呢?
有同学会说:’用HTTPS呗’。关于HTTPS参考《你必须要掌握的HTTPS》
七、密码安全
1、密码的作用?
“证明你是你”
2、验证码的机制?
“将输入的密码和存储的密码作对比”
3、生物特征密码的缺点?
如指纹解锁、面部识别这些生物特征密码虽然很方便,但是呢,一旦发生密码被盗取,是无法被更改的
4、对称加密与非对称加密?