
抛开各种鉴权不谈,只是想实现一个简单的全站加密(或者说授权访问)。比较常见的应用就是给朋友分享一下自己写的网站,但是不想被公开访问(考虑到可能托管在各类 pages 上面,希望可以纯前端实现)。
目前的思路是用 service worker 劫持所有的资源( html,js,css )请求,用非对称解密之后再返回。
有这种已经实现的轮子吗?或者有没有更好的方案。
1 Jammar 2023-03-07 14:19:39 +08:00 套个 iframe 里面登录 |
2 teem 2023-03-07 14:20:41 +08:00 页面弹窗输入密码访问,密码告诉朋友 |
3 liyang5945 2023-03-07 14:20:43 +08:00 劫持所有资源不现实,有已经实现的轮子,hexo 有插件可以把文章内容加密成乱码(查看 html 源码也是乱码),输入密码后访问 |
4 jybox 2023-03-07 14:24:00 +08:00 |
5 tool2d 2023-03-07 14:26:04 +08:00 service worker 这种最容易被破解了,和主线程交互几乎都是固定 API ,拦截一下返回值就行了。 你还不如写在 JS 代码里,混淆一下。 除非你网站不可替代,要不然没几个人会反编译混淆后的 JS 。 |
6 leimao 2023-03-07 14:27:26 +08:00 |
7 leimao 2023-03-07 14:29:09 +08:00 |
8 mxT52CRuqR6o5 2023-03-07 14:31:26 +08:00 @tool2d 得有密钥才能解密啊 |
9 tool2d 2023-03-07 14:33:20 +08:00 @mxT52CRuqR6o5 在 service worker 里 hook api ,返回的应该就是明文了。 |
10 duanxianze 2023-03-07 14:43:01 +08:00 直接在 nginx 加个鉴权不就好了? |
11 kaedeair 2023-03-07 14:47:59 +08:00 网关负责鉴权就行了 |
12 hingle 2023-03-07 14:55:30 +08:00 直接用 /path 当成密码就行了 |
13 mxT52CRuqR6o5 2023-03-07 14:55:56 +08:00 @tool2d 你得先有秘钥,才有可能 hook 到解密完的明文 |
14 tool2d 2023-03-07 15:02:48 +08:00 @mxT52CRuqR6o5 没理解,按照楼主的思路,在 service worker 里出来的就是文件明文了啊。 密文仅仅是 url fetch 返回的结果,worker 都内部处理过一次了。如果这时候还没有密钥,那浏览器也没办法解析 html 了。 |
15 liuidetmks 2023-03-07 15:05:01 +08:00 |
16 liuidetmks 2023-03-07 15:06:16 +08:00 @liuidetmks 页面很轻巧,使用浏览器自带的 crypto API 实现,没有引入其他库。 |
17 mxT52CRuqR6o5 2023-03-07 15:06:42 +08:00 @tool2d 密钥前端输入(比如 input 文本框,又或者放到 url query 里),得到秘钥再去 fetch ,service worker 劫持请求用秘钥解密 |
18 tool2d 2023-03-07 15:07:14 +08:00 @mxT52CRuqR6o5 哦,我理解你意思了。就是加密私密 blog ,不输入密钥没办法查看那种。 因为我看到楼主开头写的是加密 html/js/css 全部资源,还以为是自动解密,不需要输入密码那种。 |
20 libook 2023-03-07 15:49:42 +08:00 感觉挺有趣的,理论可行,没有见过相关实现,题主可以做一个,我去 star 。 |
21 v2yllhwa OP @liyang5945 为什么劫持所有资源不现实呢? hexo 的加密插件我知道,但是仅限于 hexo 能用吧。例如我平时写点前端的小玩意儿打包出来就不能用了。而且用框架的话,主要内容可能都在 js 里面,只加密 html 应该是不行的。 |
23 v2yllhwa OP @duanxianze 主题里说过了,可能会托管在 github pages/cloudflare pages 等等,不考虑后端的配合。 |
24 v2yllhwa OP |
25 vizards 2023-03-07 16:03:33 +08:00 via iPhone 配合 webpackJsonP 的类似实现,例如重度使用此功能的 webpack5 module federation 可以实现运行时 dynamic import 进相关的 js 代码文件块(加密后),在 service-worker 层挂一个劫持逻辑做解密,或许具有可操作性?编译时要多做一步加密 jsbundle 的操作 |
26 yaphets666 2023-03-07 16:29:22 +08:00 某几个页面不要服务端渲染,#xxxx 的路由还会被收录吗? |
27 TomVista 2023-03-07 16:39:31 +08:00 把解密方法做成油猴给朋友. |
28 azui999 2023-03-07 17:11:55 +08:00 不想被公开访问? 把你朋友拽到你屏幕前面并捆绑住他的手脚,以免他拍照录像, 这样基本就能以绝后患了 |
29 Envov 2023-03-07 19:25:43 +08:00 我觉得题主说的方法就是很好的方法 |
30 kele999 2023-03-08 20:04:21 +08:00 叫朋友去你家看 |
31 sobev 2023-03-09 10:17:45 +08:00 |
32 xieqiqiang00 2023-03-09 11:46:19 +08:00 “比较常见的应用就是给朋友分享一下自己写的网站,但是不想被公开访问” 你需要的不是 0 信任网络么 |
33 xieqiqiang00 2023-03-09 11:48:42 +08:00 [Imgur]( https://imgur.com/HbuZq9V) |
34 QiaTia 2023-03-09 18:05:36 +08:00 我记得 confirm ,prompt ,alert 这几个 js 方法是能中断浏览器进程, 如果想做的足够轻直接使用 prompt 足够了 |
35 akakidz 2023-03-10 10:01:50 +08:00 内容全部加密发布,给你朋友本地浏览器安装个油猴脚本,本地解密 |