一文理解 OAuth 您所在的位置:网站首页 oauth阮一峰博客 一文理解 OAuth

一文理解 OAuth

#一文理解 OAuth| 来源: 网络整理| 查看: 265

假设我们的系统登录需要用客户信息授权, 我们需要知道某个 email 是否是客户的员工。

客户提供一个员工表的账号,通过这个账号,我们可以读到如下数据表

...emailphonepassword...pony@tct.inc18823756624b3e3c2f99046f9ntmgr@tct.inc1726639880d0cd2693b35066pk1_sgmgr@tct.inc1783305223e55f86a1f9e06e5

客户将这个账号设为只读账号,防止我们不小心修改员工表信息。

通过上表,我们可以将用户 email 和上表 email 进行比对,实现验证。

用户使用我们的系统时,在我们的登录页输入框中输入自己的 email,我们拿到用户 email 后将用户提供的 email 和客户数据库中的 email 对比,验证成功后进入系统。

系统平稳运行三个月。

客户表示,这种方式我们可以遍历员工表,可以获知他们公司的员工组成。

于是我们联系客户,改成了第二种方式。

客户提供一个方法

(email) => boolean

这个方法暴露为接口,我们调用这个接口验证用户的 email 是否正确。这种方法我们无法读取到客户公司所有的 email。

但我们可以用编造出来的很多 email 请求这个接口,通过返回的是否是本公司员工猜出客户公司的员工组成。考虑到这一点,客户设计接口时增加了接口调用限制,一天 200 次请求,这样可以防止我们用接口去试客户公司的员工 email,进而得到它们的员工组成信息。

系统平稳运行三个月。

我们发现,即使我们不通过编造大量 email 地址请求验证接口,快速猜出客户公司员工组成。每次用户使用我们的系统,需要输入有效的客户公司 email 验证。如果我们记录用户的 email,一段时间下来,还是能得到客户公司的员工组成信息。

也就是说,用户账号不能流经我们的系统。

于是我们提出,我们的前端页面拿到用户账号后,先进行 MD5 加密,加密后传入我们的系统,我们将 MD5 传给客户,客户进行比对,返回给我们是否账号属于客户的组织。

这样我们即使存储,存储的也是一堆 MD5,我们并不能反推出用户的组织都有哪些 email。

系统平稳运行三个月。

客户表示,即使我们对他们保证我们在前端页面拿到用户输入的账号后,立即转换成 MD5 传入我们的系统,也不能保证我们未来一定不会收集账号。

为了满足客户的需求,我们需要,用户的账号不能出现在我们系统的任何一个部分,也包括前端的输入框。

也就是说对客户而言,用户不能在我们的输入框中输入自己的账号。

同时对我们而言,我们需要一个信息,来标识用户的账号,而这个信息我们无法解密出有效信息。

用户不能在我们的输入框中输入账号,那一定只能在客户的页面中输入自己的账号。

我们需要一个信息,这个信息标识了用户的信息,但我们无法解密。

而我们这里也有一个输入框,原来输入的是用户账号,现在输入的是加密的信息。

那么流程就可以是

1.用户访问客户网站,输入账号 2.客户网站返回一串 MD5 3.用户将 MD5 复制粘贴到我们网站的原账号输入框 4.用户点击登录,我们将 MD5 传给客户认证接口,验证成功进入我们的系统

这里有个问题,就是用户此时需要用的是我们的网站,却需要打开客户的地址,因此可以增加一步:

1.用户访问我们的网站,我们的网站跳转到客户网站 2.用户在客户网站,输入账号 3.客户网站返回一串 MD5 4.用户将 MD5 复制粘贴到我们网站的原账号输入框 5.用户点击登录,我们将 MD5 传给客户认证接口,验证成功进入我们的系统

这里有一处可以自动化的地方:客户网站时可以返回 MD5 给我们的网站的,因此可以改为:

1.用户访问我们的网站,我们的网站跳转到客户网站 2.用户在客户网站输入框输入账号,客户网站认证成功后跳转我们的网站,带上 MD5 3.我们的网站将 MD5 传给客户网站进行认证,验证成功后进入我们的系统

这个方案对我们来讲,我们自始至终我们传递的是一个我们无法解密的字符串,解决了烫手的用户信息问题。 对于客户来讲,email 只在自己的系统中流转,不会泄露出去,email 本身带有的一些信息不会被外部获知到。对于用户来讲,原来的登录步骤是在我们的系统输入 email, 点击登录后进入我们的系统,现在登录我们的系统时,我们的系统会跳转到另一个页面,在那个页面输入账号后点击授权,会跳回到我们的网页,然后进入我们的系统。

实际的 OAuth 为了适应一些不安全的网络环境,增加了一些额外的字段或步骤,同时核心原理也是这样的。

网络安全入门学习路线

其实入门网络安全要学的东西不算多,也就是网络基础+操作系统+中间件+数据库,四个流程下来就差不多了。

1.网络安全法和了解电脑基础

其中包括操作系统Windows基础和Linux基础,标记语言HTML基础和代码JS基础,以及网络基础、数据库基础和虚拟机使用等...

别被这些看上去很多的东西给吓到了,其实都是很简单的基础知识,同学们看完基本上都能掌握。计算机专业的同学都应该接触了解过,这部分可以直接略过。没学过的同学也不要慌,可以去B站搜索相关视频,你搜关键词网络安全工程师会出现很多相关的视频教程,我粗略的看了一下,排名第一的视频就讲的很详细。 当然你也可以看下面这个视频教程仅展示部分截图: 学到http和https抓包后能读懂它在说什么就行。

2.网络基础和编程语言

3.入手Web安全

web是对外开放的,自然成了的重点关照对象,有事没事就来入侵一波,你说不管能行吗! 想学好Web安全,咱首先得先弄清web是怎么搭建的,知道它的构造才能精准打击。所以web前端和web后端的知识多少要了解点,然后再学点python,起码得看懂部分代码吧。

最后网站开发知识多少也要了解点,不过别紧张,只是学习基础知识。

等你用几周的时间学完这些,基本上算是具备了入门合格渗透工程师的资格,记得上述的重点要重点关注哦! 再就是,要正式进入web安全领域,得学会web渗透,OWASP TOP 10等常见Web漏洞原理与利用方式需要掌握,像SQL注入/XSS跨站脚本攻击/Webshell木马编写/命令执行等。

这个过程并不枯燥,一边打怪刷级一边成长岂不美哉,每个攻击手段都能让你玩得不亦乐乎,而且总有更猥琐的方法等着你去实践。

学完web渗透还不算完,还得掌握相关系统层面漏洞,像ms17-010永恒之蓝等各种微软ms漏洞,所以要学习后渗透。可能到这里大家已经不知所云了,不过不要紧,等你学会了web渗透再来看会发现很简单。

其实学会了这几步,你就正式从新手小白晋升为入门学员了,真的不算难,你上你也行。

4.安全体系

不过我们这个水平也就算个渗透测试工程师,也就只能做个基础的安全服务,而这个领域还有很多业务,像攻防演练、等保测评、风险评估等,我们的能力根本不够看。

所以想要成为一名合格的网络工程师,想要拿到安全公司的offer,还得再掌握更多的网络安全知识,能力再更上一层楼才行。即便以后进入企业,也需要学习很多新知识,不充实自己的技能就会被淘汰。

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

尾言

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,最后联合CSDN整理了一套【282G】网络安全从入门到精通资料包,需要的小伙伴可以点击链接领取哦! 网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有