抛开各种鉴权不谈,只是想实现一个简单的全站加密(或者说授权访问)。比较常见的应用就是给朋友分享一下自己写的网站,但是不想被公开访问(考虑到可能托管在各类 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 1
页面弹窗输入密码访问,密码告诉朋友
|
3
liyang5945 2023-03-07 14:20:43 +08:00
劫持所有资源不现实,有已经实现的轮子,hexo 有插件可以把文章内容加密成乱码(查看 html 源码也是乱码),输入密码后访问
|
4
jybox 2023-03-07 14:24:00 +08:00 1
|
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
内容全部加密发布,给你朋友本地浏览器安装个油猴脚本,本地解密
|