V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
weekidjoker
V2EX  ›  程序员

请教个问题:前端请求加密,通过查看源码还是可以破解,那么加密的意义是什么?

  •  1
     
  •   weekidjoker · 2023-08-20 13:04:23 +08:00 · 8079 次点击
    这是一个创建于 443 天前的主题,其中的信息可能已经有所发展或是发生改变。
    67 条回复    2023-08-22 22:58:58 +08:00
    sduoduo233
        1
    sduoduo233  
       2023-08-20 13:12:54 +08:00 via Android
    让逆向更复杂
    lsk569937453
        2
    lsk569937453  
       2023-08-20 13:13:36 +08:00 via Android
    可以混淆 js 增加破解难度。
    一切的一切只是为了增加爬虫的成本。
    m0unta1n886
        3
    m0unta1n886  
       2023-08-20 13:15:09 +08:00   ❤️ 1
    你这个问题就像,为什么要用 md5 ,有的值撞库也能撞出来
    tool2d
        4
    tool2d  
       2023-08-20 13:15:40 +08:00 via Android
    js 混淆后代码一多,没那么容易被你破解的。
    ruixue
        5
    ruixue  
       2023-08-20 13:16:51 +08:00   ❤️ 1
    能增加一点门槛就能减少很多攻击了,就类似把 ssh 端口改成高位随机端口,避免不了针对性的攻击但也能很大程度上降低被大撒网式攻击的概率,而且查看源码也未必都能破解,比如非对称加密就破解不了
    ShoreNinth
        6
    ShoreNinth  
       2023-08-20 13:16:55 +08:00 via Android
    就加密来说,算法已经不需要
    dfkjgklfdjg
        7
    dfkjgklfdjg  
       2023-08-20 13:17:15 +08:00   ❤️ 2
    和前端的代码混淆一样的作用啊,增加难度和门槛。
    或者说防止因为明文导致中间传输、转发层面的一些暴露风险,也可以避免在后端日志层面出现的暴露。
    ShoreNinth
        8
    ShoreNinth  
       2023-08-20 13:19:31 +08:00 via Android
    (接上)被加密了,更重要的是秘钥
    yinmin
        9
    yinmin  
       2023-08-20 13:33:21 +08:00 via iPhone   ❤️ 1
    为保障数据安全的加密,启用 https 即可。前端加密更多的是为了防爬虫,增加爬虫开发成本。
    weekidjoker
        10
    weekidjoker  
    OP
       2023-08-20 13:55:38 +08:00
    嗯,明白了,谢谢大家。主要是增加逆向的成本,但还是防不了有心人
    geelaw
        11
    geelaw  
       2023-08-20 14:29:47 +08:00 via iPhone
    要回答你的问题,第一步是搞清楚你说的“破解”是什么意思。
    totoro52
        12
    totoro52  
       2023-08-20 14:53:12 +08:00
    复杂的算法基本可以难倒一大批小白了,但如果真有心想搞的人一样能拿下,所以这东西存在就是有价值的
    yidev
        13
    yidev  
       2023-08-20 14:55:28 +08:00
    太麻烦的我就不抓了. 换其他网站
    w8123
        14
    w8123  
       2023-08-20 14:58:39 +08:00
    1 、提升逆向、爬接口的门槛。
    2 、在 http 下防止中间网络设备不安全,防止重放攻击。
    3 、在 https 下防止用户设备、网络不安全(如公司网络下、设备被安装了根证书)
    ....
    hexiaowu1993
        15
    hexiaowu1993  
       2023-08-20 14:59:29 +08:00   ❤️ 4
    你要明白,没有绝对的安全,所有的手段,都是为了提高破解者的成本。
    如果要搞你的成本足够高,那就没人会去搞你,因为不值当。
    haikea
        16
    haikea  
       2023-08-20 15:32:05 +08:00
    如果是 to g,让客户觉得有安全感?
    weekidjoker
        17
    weekidjoker  
    OP
       2023-08-20 15:52:52 +08:00
    @geelaw 我说的破解是找到加密逻辑和公钥
    weekidjoker
        18
    weekidjoker  
    OP
       2023-08-20 15:53:10 +08:00
    @haikea to g 是什么?
    pengtdyd
        19
    pengtdyd  
       2023-08-20 16:10:57 +08:00   ❤️ 1
    防止劫持或者中间人攻击。
    duke807
        20
    duke807  
       2023-08-20 16:14:58 +08:00 via Android
    wasm 怎么看源码?
    inktiger
        21
    inktiger  
       2023-08-20 16:16:40 +08:00
    有外网的人找过我写某些电商网站和抢单网站的抢单程序,对于那些前端加密的,有时候逆向分析 js ,代码洋洋洒洒展示,10 万行,这对于一般人来说,钱要是没给到位,鬼才接他这一单,还要破解有的网站的人机验证,验证码方式,而且还要防止网站改版,还要持续监控和测试网站的风控策略,一套整下来,一般人还真 hold 不住,成本只要高了,惦记的人就少了
    ijrou
        22
    ijrou  
       2023-08-20 16:22:57 +08:00
    增加破解难度,挡住 98 想爬的人
    geelaw
        23
    geelaw  
       2023-08-20 16:24:38 +08:00 via iPhone
    @weekidjoker #17 那你的需求无法用软件达成,只要加密代码存在于客户可以自由访问的内存里,那客户当然知道加密逻辑和公钥。
    yumusb
        24
    yumusb  
       2023-08-20 16:46:48 +08:00
    加密手段不能百分百防破解,但是可以不断提高百分之 X 的分子
    murmur
        25
    murmur  
       2023-08-20 16:47:07 +08:00
    能防住一部分是一部分
    aecra1
        26
    aecra1  
       2023-08-20 17:01:40 +08:00
    @weekidjoker 对公
    wedo
        27
    wedo  
       2023-08-20 18:06:24 +08:00 via Android
    因为不加密的话学过英语知道 F12 的小学生也能搞破坏,只有虚荣心没有功利心的小孩子搞起破坏来太可怕了……
    bequt
        28
    bequt  
       2023-08-20 21:29:54 +08:00
    小白和灰产太多了,还是得增加一下攻破难度。
    x86
        29
    x86  
       2023-08-20 21:41:14 +08:00 via iPhone
    不是所有人都有能力解密的呀
    weeei
        30
    weeei  
       2023-08-20 22:19:31 +08:00
    你说的对,这种手段是为了提高门槛,小菜鸡看了个教程抓包一下就能搞你,烦的很。
    weeei
        31
    weeei  
       2023-08-20 22:21:41 +08:00
    在先进一点的浏览器就应用 wasm 作为加密手段,老浏览器降级为使用 js 加密。可以过滤掉刚入门的菜鸡了。
    chaoschick
        32
    chaoschick  
       2023-08-20 22:27:35 +08:00 via Android
    密码学 阳谋
    akakidz
        33
    akakidz  
       2023-08-20 22:44:27 +08:00
    加密手段足够复杂,警察破案的成功率更高呀🤣首先就可以排出很大一部分的人
    Huelse
        34
    Huelse  
       2023-08-20 22:44:49 +08:00
    加密采取什么样的方案取决于目标对象,浏览器作为客户端是要查看内容的当然要能够解密,但如果中间过程例如网关和路由器不在这个对象范围内自然就无法解密查看(正常情况下)。

    而且安全本身具有水桶效应,整体安全不取决于某个环节有多强,而是看最薄弱的环节是否安全。

    整个环节中最不安全的其实是用户本身、其次是系统环境、最后才是浏览器等应用本身(内存暴露等)。

    所以最好防守的也就是应用,系统和用户什么的你根本控制不了,加密或者套壳浏览器就已经提高门槛了。
    SP00F
        35
    SP00F  
       2023-08-21 00:44:03 +08:00   ❤️ 1
    一锤子就能开的门,为什么要装锁?反正我都能进你屋子,为什么你要装个门?
    就这个理儿
    Rehtt
        36
    Rehtt  
       2023-08-21 08:24:10 +08:00
    @weekidjoker To Government
    weekidjoker
        37
    weekidjoker  
    OP
       2023-08-21 08:33:09 +08:00
    @SP00F 你这解释无敌哈哈哈
    weekidjoker
        38
    weekidjoker  
    OP
       2023-08-21 08:33:24 +08:00
    @Rehtt 了解了,thx
    fate
        39
    fate  
       2023-08-21 08:37:22 +08:00
    所有的对抗,都是成本对抗
    DIO
        40
    DIO  
       2023-08-21 08:59:21 +08:00
    和门锁一样,防君子不防小人。真想进门拿锤子框框给你砸开
    ohwind
        41
    ohwind  
       2023-08-21 09:02:44 +08:00   ❤️ 2
    上面都在说什么?而且前端加密取决于你是怎么加的,加密的是什么东西。如果你是指你请求的数据加密,即使你知道算法,没有密钥或者私钥怎么解密?如果你是指源码加密(混淆),这当然可以被破解,混淆可以增加破解成本,但不意味着百分百防御,你也可以把逻辑扔 WASM 里,当然这也不是一定安全的,所以一切机密的算法和逻辑你应该放在服务器而不是前端。
    xinyu391
        42
    xinyu391  
       2023-08-21 09:17:31 +08:00
    加密解决的是传输过程防止偷窥
    di1012
        43
    di1012  
       2023-08-21 09:20:58 +08:00
    防君子不防小人
    laqow
        44
    laqow  
       2023-08-21 09:55:41 +08:00
    腾讯轻量云一堆机器蹲着内网监听呢
    lanbatian
        45
    lanbatian  
       2023-08-21 10:23:49 +08:00
    **既然市面上大部分锁都可以在 20 分钟内撬开,那门上装锁是否还有意义?**

    如果对数据传输的安全有要求的话,有加密总比没有要强把。
    zpf124
        46
    zpf124  
       2023-08-21 10:33:04 +08:00
    在使用 https 的情况下,个人对于前端加密是觉得属于脱裤子放屁,但搞支付保险等涉及大钱的东西的时候,合规部门或者等保认证要求加就加呗。

    安全评分从 90 变成了 93 对我而言是觉得做与不做差距不大,后端部分属于那 90 分,要么不扣要么直接-90 ,如果后端被破了,那有你这 1 分还是没有都无所谓,所以 最后得分是 90 、93 还是 0 、3 ,这其中的 3 分的部分重要么。
    millet230413
        47
    millet230413  
       2023-08-21 10:34:41 +08:00
    @duke807 这边知道这个的,并使用这个的看下来没有呢,再写一个 ajax 劫持的 sdk ,基本上没有破解的可能
    zpf124
        48
    zpf124  
       2023-08-21 10:36:36 +08:00
    @ohwind 前端数据加密的密钥不就是代码里写着的吗,或者是从某些接口可以获取到,只要分析代码就可以做的伪装客户端,最多是使用非对称加密,可以保证中间人无法伪装成后端来欺骗前端,然而 https + 可信 ca 基本上就已经完全防护了中间人了。
    weekidjoker
        49
    weekidjoker  
    OP
       2023-08-21 11:00:12 +08:00
    @millet230413 我没有写过 wasm ,但是应该也可以反编译吧,所以还是一个花费成本问题?
    ohwind
        50
    ohwind  
       2023-08-21 11:02:06 +08:00   ❤️ 1
    @zpf124 伪装客户端你没有任何办法,除非你是给特定的人用的,可以让他们用自己的客户端,否则别人改一下浏览器,就算你混淆也没用。所以我说要看你加密的目的是什么,如果是为了防止中间人偷窥,https 足够用了。如果目的是防止伪装客户端,那基本不可能完全避免,所以行业内的做法都是把涉及到敏感数据的都让你登录完成身份验证,加密过程服务端进行。
    ohwind
        51
    ohwind  
       2023-08-21 11:04:00 +08:00
    @weekidjoker #49 是的,仅仅是提高了破解成本而已。防破解本身就不是一个简单的问题,更何况是对于本就更容易破解的网页前端。
    blurh11E27
        52
    blurh11E27  
       2023-08-21 11:14:20 +08:00
    哈哈哈哈哈

    我也做过这个,我也有同样的问题,但是我思考了一下,
    公钥 加密后 + ip 加 时间戳 我擦 毫无卵用 好像等于告诉别人 我加密方式 和 公钥? 最多混淆一下。
    还不如 直接简单 md5 加盐

    加密 加 ip shi 时间戳 最多也就防止别人抓取后台返回的 token
    但源码前端的别人还是能看到 就是 看混淆了吧
    KT0J
        53
    KT0J  
       2023-08-21 11:14:53 +08:00
    @ohwind

    感觉只有你在认真回答。。。
    millet230413
        54
    millet230413  
       2023-08-21 11:19:18 +08:00   ❤️ 1
    @weekidjoker wasm 是用 C 语言编写相关功能,然后编译成二进制嵌入到 js 代码中,前端反编译只能看到 C 编译成的二进制文本,而不是 js 的字符文本,当然了,二进制的可执行代码也可以反编译,但是在加了自定义混淆算法后,破解的可能性非常低
    anpho
        55
    anpho  
       2023-08-21 11:27:34 +08:00
    增加破解成本。
    跟防盗门的锁一样,防破坏时间因为级别不同而有明显的区别。甲级不低于30分钟,乙级不低于15分钟,丙级不低于10分钟,丁级不低于6分钟。
    coolloves
        56
    coolloves  
       2023-08-21 11:35:09 +08:00
    其实,就好比,gfw 的意义.总有人会施法.
    centralpark
        57
    centralpark  
       2023-08-21 11:36:51 +08:00
    这就跟 App 加壳一个道理啊,多少年的业界实践,怎么还会有人觉得毫无卵用呢?建议搜一下 jsvmp 、js 补环境等关键词了解一下前端加密给爬虫和灰产带来了多大的痛苦。

    不过话说回来,国内多喜欢加密,国外多喜欢风控,一个偏向客户端,一个偏向服务端,这个倒是生态的差异了。
    Perry
        58
    Perry  
       2023-08-21 11:53:07 +08:00
    前端请求加密不代表加密是在前端执行的啊。。。后端加密之后发给前端,然后前端把请求加上签名就行。
    duke807
        59
    duke807  
       2023-08-21 11:56:43 +08:00
    @weekidjoker #49 你要是觉得 wasm 也可以反编译,那几乎所有商业软件都没有存在的必要了,因为都可以反编译
    liuidetmks
        60
    liuidetmks  
       2023-08-21 12:24:28 +08:00
    增加成本,现在前端混淆很复杂的
    另外如果使用了 RSA ECC 公钥体系的算法, 公钥只能加密的算法,你是无法解密的。只能服务器解密
    wangxiaoaer
        61
    wangxiaoaer  
       2023-08-21 12:27:04 +08:00 via iPhone
    非对称加密,前端用公钥加密,后端用私钥解密的,麻烦楼主破解个看看。
    weekidjoker
        62
    weekidjoker  
    OP
       2023-08-21 12:59:40 +08:00
    @duke807 那还有个好奇的问题,市面上的绿色软件是怎么实现的
    duke807
        63
    duke807  
       2023-08-21 13:08:02 +08:00 via Android
    @weekidjoker 那是商业公司为了市场占有率,故意留了口子好让别人破解,甚至是自己人破解

    譬如 Intel/Altera 的 Quartus 原件的破解版,基本上都是其中国区代理 骏龙科技 释放出来的,而且破解版本还打了骏龙科技的广告

    又譬如,FPGA/ASIC 里面真正值钱的 IP 核,现在几乎是不可能被破解的
    onice
        64
    onice  
       2023-08-21 16:40:59 +08:00   ❤️ 1
    意义在于避免中间人攻击。如果客户的浏览器到后端服务器,如果网络链路上存在抓包设备。我们假定网站没有采用 HTTPS ,而是传统的 HTTP 。那么客户和后端服务器的数据就能被抓包设备截获,并获取到传输的数据。如果是注册登录功能的包,是可以直接看到用户名和密码的。如果数据在浏览器加密了,传输的数据则是密文,即使是在中间人截获,这个数据也是无意义的。

    除了使用物理设备去截获链路上的数据包,在局域网中,同网段的主机还可以使用 ARP 欺骗的攻击方式,去劫持流量。如果前端使用了加密,在这种有风险的网络环境中,用户和网站服务器的通信也是安全的。
    YuJianrong
        65
    YuJianrong  
       2023-08-22 02:32:43 +08:00
    @onice 中间人截获加密的密码怎么就没用了?
    把这个加密的密码直接发到后台不就登录了?
    即使加密的时候带上了时间戳,既然加密算法公开,如果密码不长或者在字典里跑一遍字典也能算出来。

    简单来说加密不能代替 HTTPS ,不用 HTTPS 和裸跑没区别。
    就上面某位朋友的打分来说,HTTPS 、后端存加盐 hash 、前端加密的方案安全性算 93 分的话,其中
    HTTPS:50 分
    后端存加盐 hash:40 分
    前端加密:3 分

    做不做前端加密就看要不要这 3 分
    onice
        66
    onice  
       2023-08-22 18:01:21 +08:00
    @YuJianrong 随手一答,的确没考虑那么多。普通加密确实不行,但是在不安全的链路下,是一定有对应的加密算法来解决安全问题的,相信这一点是可以用前端实现的。网络协议我研究不太深,不过可以参考 VPN 家族的协议是怎么解决重放攻击的。
    YuJianrong
        67
    YuJianrong  
       2023-08-22 22:58:58 +08:00
    @onice 查了一下,VPN 防止重放攻击主要也就是加时间戳或者序号。
    “在不安全的链路下,是一定有对应的加密算法来解决安全问题的” 这点我觉得是真没有……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5742 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 01:40 · PVG 09:40 · LAX 17:40 · JFK 20:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.