题记:
马上就要招聘了, 所以我打算放置简历在自己的网页上, 但是又不想给除了招聘的人, 或者我指定的人外看, 所以我需要对网页页面加密
我找了许多资料, 查看了许多所谓的页面加密, 但是有 60% 左右都是网页锁, 采用第三方插件, 而且只能在某个游览器某个账号下才能实现
so, 我只能自己研究解决了, 这个时候有人给我百度网盘分享一个文件, 是需要输入密码的, 于是我发现这个就是我需要的, 于是我开始研究百度网盘私密分享的原理
简易分析百度网盘:
1 先将所有 cookie 清空, 账号取消登录
2 打开 chrome, 输入分享的链接, 在跳转链接之前, 打开开发者选项, 监控文件变化
3 敲击回车, 发现 url 链接发生变化
4url 从 /s/1L... 变为 /share/init?surl=Lrw...
5 这时候看 network 中加载的文件变成 302 状态
6302 代表重定向, 意思是原来 URL 重定向至新的地址, 也就是说, 百度网盘服务器那边判断你这个分享链接没有输入过密码, 也就没存储 cookie, 所以原本访问的页面被重定向至新的密码页
7 这时候我们输入正确密码, 重新加载分享链接, 发现返回正确的 html, 和 200 状态
8 并且会发现 cookie 中存入很多内容, 并且页面在访问后端时, 会自动携带 cookie(最近一段时间我一直在用 localstorage, 所以忘了 cookie, 可以自动携带)
所以通过上分析, 发现主要存于 cookie 内容中, 实现的加密访问
下面就是我写的加密网页原理 (我使用的是 nodejs,ejs 模板, express), 因为后端可以用好多种去写, 这里只写思路, 不写具体代码
前期准备工作, 必须有个加密路径的数据表
id | path | password | plaintext | random_code | time |
一般为 uuid | 请求的路径,根据自己喜好写,我的就是 /a.html | sha256 加密,字符串为明文密码连接上 id 和随机码 | 明文密码不进行单向加密 | 随机码随机的一组大小写字母加数字 | 创建时间 |
1 当人们访问 a.html, 也就是加密不想让访问的页面, 因为页面会自动携带 cookie
2 所以我们在后端拿到 cookie, 和请求路径时, 然后进行数据库对比, 这里有个问题, 如果只有 HTML 加密, 则先判断下请求的是 html 还是其他的, 可以减少查询
3 如果在表中找到这个请求路径, 则查看 cookie 中是否有 id=password 这个数据, 有的话就直接返回请求的 html 文件
4 如果不存在数据, 则返回渲染的输入密码的 html, 自己想办法把原来路径放入输入密码 html, 输入正确密码后好跳转
5 输入密码, ajax 请求, 通过输入的明文密码, 以及 id 和数据库中的随机码, 变为字符串连接起来, 和 password 比较, 或者直接比较明文密码是否相同
6 一旦正确, 为了安全起见, 返回加密后的 password, 也就是密文
7 在密码 html 的 js 中, 将得到的密文和 id 存入 cookie 中, 跳转到原来访问的页面
8 这个时候有 cookie 了, 然后对比成功, 返回 a.html 文件
以上只是我的初期测试写法, 也许有更好的, 和更优化的方法, 欢迎指正
来源: https://www.cnblogs.com/spirit-ling/p/8596518.html