V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
v2yllhwa
V2EX  ›  奇思妙想

纯前端的加密访问

  •  
  •   v2yllhwa · 92 天前 via Android · 2776 次点击
    这是一个创建于 92 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    35 条回复    2023-03-10 10:01:50 +08:00
    Jammar
        1
    Jammar  
       92 天前
    套个 iframe 里面登录
    teem
        2
    teem  
       92 天前   ❤️ 1
    页面弹窗输入密码访问,密码告诉朋友
    liyang5945
        3
    liyang5945  
       92 天前
    劫持所有资源不现实,有已经实现的轮子,hexo 有插件可以把文章内容加密成乱码(查看 html 源码也是乱码),输入密码后访问
    jybox
        4
    jybox  
       92 天前   ❤️ 1
    tool2d
        5
    tool2d  
       92 天前
    service worker 这种最容易被破解了,和主线程交互几乎都是固定 API ,拦截一下返回值就行了。

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

    除非你网站不可替代,要不然没几个人会反编译混淆后的 JS 。
    mxT52CRuqR6o5
        8
    mxT52CRuqR6o5  
       92 天前
    @tool2d 得有密钥才能解密啊
    tool2d
        9
    tool2d  
       92 天前
    @mxT52CRuqR6o5 在 service worker 里 hook api ,返回的应该就是明文了。
    duanxianze
        10
    duanxianze  
       92 天前
    直接在 nginx 加个鉴权不就好了?
    kaedeair
        11
    kaedeair  
       92 天前
    网关负责鉴权就行了
    hingle
        12
    hingle  
       92 天前
    直接用 /path 当成密码就行了
    mxT52CRuqR6o5
        13
    mxT52CRuqR6o5  
       92 天前
    @tool2d 你得先有秘钥,才有可能 hook 到解密完的明文
    tool2d
        14
    tool2d  
       92 天前
    @mxT52CRuqR6o5 没理解,按照楼主的思路,在 service worker 里出来的就是文件明文了啊。

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

    因为我看到楼主开头写的是加密 html/js/css 全部资源,还以为是自动解密,不需要输入密码那种。
    v2yllhwa
        19
    v2yllhwa  
    OP
       92 天前 via Android
    @teem 这里讨论的是实现方式,即弹窗输入密码后怎么解密的问题
    libook
        20
    libook  
       92 天前
    感觉挺有趣的,理论可行,没有见过相关实现,题主可以做一个,我去 star 。
    v2yllhwa
        21
    v2yllhwa  
    OP
       92 天前 via Android
    @liyang5945 为什么劫持所有资源不现实呢? hexo 的加密插件我知道,但是仅限于 hexo 能用吧。例如我平时写点前端的小玩意儿打包出来就不能用了。而且用框架的话,主要内容可能都在 js 里面,只加密 html 应该是不行的。
    v2yllhwa
        22
    v2yllhwa  
    OP
       92 天前 via Android
    @jybox 看起来不错,可惜不能同时加密 js 等资源。
    v2yllhwa
        23
    v2yllhwa  
    OP
       92 天前 via Android
    @duanxianze 主题里说过了,可能会托管在 github pages/cloudflare pages 等等,不考虑后端的配合。
    v2yllhwa
        24
    v2yllhwa  
    OP
       92 天前 via Android
    @hingle 这个方法我确实用过。但是让我感到疑惑的是这个链接(形如 xxx.com/<uuid>)很快就被 bing 收录了,我怀疑是 edge 浏览器对用户浏览的页面进行上报了。
    vizards
        25
    vizards  
       92 天前 via iPhone
    配合 webpackJsonP 的类似实现,例如重度使用此功能的 webpack5 module federation 可以实现运行时 dynamic import 进相关的 js 代码文件块(加密后),在 service-worker 层挂一个劫持逻辑做解密,或许具有可操作性?编译时要多做一步加密 jsbundle 的操作
    yaphets666
        26
    yaphets666  
       92 天前
    某几个页面不要服务端渲染,#xxxx 的路由还会被收录吗?
    TomVista
        27
    TomVista  
       92 天前
    把解密方法做成油猴给朋友.
    azui999
        28
    azui999  
       92 天前
    不想被公开访问?
    把你朋友拽到你屏幕前面并捆绑住他的手脚,以免他拍照录像,
    这样基本就能以绝后患了
    Envov
        29
    Envov  
       92 天前
    我觉得题主说的方法就是很好的方法
    kele999
        30
    kele999  
       91 天前
    叫朋友去你家看
    sobev
        31
    sobev  
       90 天前
    github page hexo 主题,有个插件可以输入密码后访问
    ![]( )
    xieqiqiang00
        32
    xieqiqiang00  
       90 天前
    “比较常见的应用就是给朋友分享一下自己写的网站,但是不想被公开访问”
    你需要的不是 0 信任网络么
    xieqiqiang00
        33
    xieqiqiang00  
       90 天前
    QiaTia
        34
    QiaTia  
       90 天前
    我记得 confirm ,prompt ,alert 这几个 js 方法是能中断浏览器进程, 如果想做的足够轻直接使用 prompt 足够了
    akakidz
        35
    akakidz  
       89 天前
    内容全部加密发布,给你朋友本地浏览器安装个油猴脚本,本地解密
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2717 人在线   最高记录 5634   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 15:04 · PVG 23:04 · LAX 08:04 · JFK 11:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.