该系列记录学习极客时间–安全攻防技能30讲相关内容
安全的本质
安全的本质就是保护数据被合法地使用。
- 数据:应用最核心的东西;如用户信息、订单信息等等
- 合法:大到法律法规、业务规定;小到业务流程、字段类型;
- 使用:访问
能
访问的,更改可以
更改的
此处的CIA非美国中央情报局,而是信息系统的安全等级三个性质-百度百科
- 机密性(Confidentiality)指只有授权用户可以获取信息。
- 完整性(Integrity)指信息在输入和传输的过程中,不被非法授权修改和破坏,保证数据的一致性。
- 可用性(Availability)指保证合法用户对信息和资源的使用不会被不正当地拒绝。
机密性【不可见】
定义:机密性(Confidentiality)指只有授权用户可以获取信息。
举例子:读大学时,一般情况,作为学生的你是无法获取教师薪酬的。
凡是数据都有一定等级的访问限制,FBI探员无法访问最高机密一个道理。
完整性【不可改】
定义:完整性(Integrity)指信息在输入和传输
的过程中,不被非法授权修改和破坏,保证数据的一致性。
举例子:大学期间,不幸运的你挂科了,恰巧你的专业是计算机相关,恰巧想改成绩,即便你非法获取到了更改权限,你改了成绩
;
不幸的是完整性会记录修改日志,如果你恰巧不懂完整性
,那么等待你的是啥自己该有点数。。。
可用性【可读】
定义:可用性(Availability)指保证合法用户
对信息和资源的使用不会被不正当地拒绝
。
举例子:大学期间你可以正常
访问的成绩管理系统
,否则你就会骂:垃圾系统
,你口中的垃圾系统,大概了就是可用性太差。
安全的解决方案
认证 Authentication
认证就是我要输入帐号和密码来证明我是我
- 定义:确认身份,强调身份的合法性
- 分类:对内、对外
- 威胁来源:无认证、弱密码、认证信息泄漏
相信输入过用户密码的用户都明白登陆了才可以购买商品,这就是第一步,你被认为是合法用户。
下图很直观的展示了对内对外的区别,就不用赘述了。
威胁
无认证
- 对内来说:数据库、服务器配置等等,如果没有界限划分,
删库跑路
也算是恰当的例子 - 对外来说:不同的路由根据业务来判定是否需要认证,比如首页、订单页,两个完全不同认证范畴,是不一样的。
// 注: |
弱密码
密码强度,指一个密码对抗猜测或是暴力破解的有效程度。
弱密码举例子
admin——太容易猜出 |
有点新意可行?》?
- FLZX3000cY4yhx9day (飞流直下三千尺,疑似银河下九天)
- hanshansi.location()!∈[gusucity](姑苏城外寒山寺)
- hold?fish:palm(鱼和熊掌不可兼得)
- Tree_0f0=sprintf(“2_Bird_ff0/a”)(两个黄鹂鸣翠柳)
- csbt34.ydhl12s(池上碧苔三四点,叶底黄鹂一两声);
- for_$n(@ RenSheng)_$n+=”die”(人生自古谁无死)
- ppnn13%dkstFeb.1st。中文解析:娉娉袅袅十三余,豆蔻梢头二月初。
建议
- 设置强密码
- 定期修改
- 如:短信验证;
对于人脸验证,持保留态度
单点登陆
单点登录的概念很简单:用户只需要进行一次认证,就可以访问所有的网页、应用和其他产品了。
CAS(Central Authentication Service,集中式认证服务)
JWT(JSON Web Token)
JWT(JSON Web Token)是一种非常轻量级的单点登录流程。它会在客户端保存一个凭证信息
,之后在你每一次登录的请求中都带上这个凭证,将其作为登录状态的依据。
JWT 的好处
在于,不需要应用服务端去额外维护 Cookie 或者 Session 了。
但是,正是因为它将登录状态落到了客户端,所以我们无法进行注销等操作了。
授权
对外授权
摘录–[简易图解]『 OAuth2.0』 『进阶』 授权模式总结
授权就是并非通过帐号和密码来把我的东西借给其他人
# 分类 |
OAuth(Open Authorization)
比如:微博采用第三方的登录-QQ登录,用户QQ授权之后,微博可以通过OAuth判断是否却是授权。
应用想要维护这个状态,就需要维护自己的登录凭证,也就是后期要输入手机号注册。
强烈建议可以仔细看看这个博主的介绍—[简易图解]『 OAuth2.0』 『进阶』 授权模式总结
OpenID(Open Identity Document)
OpenID(Open Identity Document)和 OAuth 的功能基本一致。但是,OpenID 不提供授权的功能。最常见的,当我们需要在应用中使用微信支付
的时候,应用只需要收集支付相关
的信息即可,并不需要获取用户的微信头像
。
在实际情况中,基于各种业务需求的考虑,很多公司都倾向于自己去实现一套 SSO 的认证体系,它的认证流程如下图所示:
对内授权
审计 && 问责
当你在授权下完成操作后,安全需要检查一下“你做了什么”,这个检查的过程就是审计。 当发现你做了某些异常操作时,安全还会提供你做了这些操作的“证据”,让你无法抵赖, 这个过程就是问责。
- 审计 && 问责 的
基础
: 日志 - 问责,是对审计结果的一个保障,有的时候我们也称之为
“不可否认性”
。- 一方面,它保证了黑客
无法通过篡改
日志或者仿造身份,来隐藏自己的行为; - 一方面它也保证了,当审计中发现了恶意的行为,需要寻求法律保护时,我们能够
提供充分的证据
。
- 一方面,它保证了黑客
授权 VS 认证
- 认证就是我要输入帐号和密码来证明我是我
- 授权就是并非通过帐号和密码来
把我的东西借给其他人
- 这其中的关键就是,是否需要输入帐号密码。记住,OAuth 不需要输入帐号和密码,你要做的只是授权。
总结
大部分情况下,事前防御属于认证,事中防御属于授权,事后防御属于审计。
密码学基础
对称加密
原理请网上参考相关资源-AES加密算法和RSA加密算法
非对称加密
原理请网上参考相关资源-AES加密算法和RSA加密算法
散列算法
MD5(消息摘要算法,Message-Digest Algorithm 5)
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。
已经被破解。
情况一:你将某文件发给别人,MD5得到128位的信息摘要,如果别人更改,则对比一摘要即可。防止篡改。
SHA
SHA(安全散列算法,Secure Hash Algorithm)。
虽然 SHA 的唯一性也被破解了,但是这也不会构成 大的安全问题。目前,SHA-256 普遍被认为是相对安全的散列算法,也是我最推荐你使用 的散列算法。