纯前端的加密访问

2023-03-07 14:13:29 +08:00
 v2yllhwa

抛开各种鉴权不谈,只是想实现一个简单的全站加密(或者说授权访问)。比较常见的应用就是给朋友分享一下自己写的网站,但是不想被公开访问(考虑到可能托管在各类 pages 上面,希望可以纯前端实现)。

目前的思路是用 service worker 劫持所有的资源( html,js,css )请求,用非对称解密之后再返回。

有这种已经实现的轮子吗?或者有没有更好的方案。

3717 次点击
所在节点    奇思妙想
35 条回复
Jammar
2023-03-07 14:19:39 +08:00
套个 iframe 里面登录
teem
2023-03-07 14:20:41 +08:00
页面弹窗输入密码访问,密码告诉朋友
liyang5945
2023-03-07 14:20:43 +08:00
劫持所有资源不现实,有已经实现的轮子,hexo 有插件可以把文章内容加密成乱码(查看 html 源码也是乱码),输入密码后访问
jybox
2023-03-07 14:24:00 +08:00
tool2d
2023-03-07 14:26:04 +08:00
service worker 这种最容易被破解了,和主线程交互几乎都是固定 API ,拦截一下返回值就行了。

你还不如写在 JS 代码里,混淆一下。

除非你网站不可替代,要不然没几个人会反编译混淆后的 JS 。
leimao
2023-03-07 14:27:26 +08:00
leimao
2023-03-07 14:29:09 +08:00
mxT52CRuqR6o5
2023-03-07 14:31:26 +08:00
@tool2d 得有密钥才能解密啊
tool2d
2023-03-07 14:33:20 +08:00
@mxT52CRuqR6o5 在 service worker 里 hook api ,返回的应该就是明文了。
duanxianze
2023-03-07 14:43:01 +08:00
直接在 nginx 加个鉴权不就好了?
kaedeair
2023-03-07 14:47:59 +08:00
网关负责鉴权就行了
hingle
2023-03-07 14:55:30 +08:00
直接用 /path 当成密码就行了
mxT52CRuqR6o5
2023-03-07 14:55:56 +08:00
@tool2d 你得先有秘钥,才有可能 hook 到解密完的明文
tool2d
2023-03-07 15:02:48 +08:00
@mxT52CRuqR6o5 没理解,按照楼主的思路,在 service worker 里出来的就是文件明文了啊。

密文仅仅是 url fetch 返回的结果,worker 都内部处理过一次了。如果这时候还没有密钥,那浏览器也没办法解析 html 了。
liuidetmks
2023-03-07 15:05:01 +08:00
liuidetmks
2023-03-07 15:06:16 +08:00
@liuidetmks 页面很轻巧,使用浏览器自带的 crypto API 实现,没有引入其他库。
mxT52CRuqR6o5
2023-03-07 15:06:42 +08:00
@tool2d 密钥前端输入(比如 input 文本框,又或者放到 url query 里),得到秘钥再去 fetch ,service worker 劫持请求用秘钥解密
tool2d
2023-03-07 15:07:14 +08:00
@mxT52CRuqR6o5 哦,我理解你意思了。就是加密私密 blog ,不输入密钥没办法查看那种。

因为我看到楼主开头写的是加密 html/js/css 全部资源,还以为是自动解密,不需要输入密码那种。
v2yllhwa
2023-03-07 15:48:35 +08:00
@teem 这里讨论的是实现方式,即弹窗输入密码后怎么解密的问题
libook
2023-03-07 15:49:42 +08:00
感觉挺有趣的,理论可行,没有见过相关实现,题主可以做一个,我去 star 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/921892

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX