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

http body 是否可以整体加密

  •  
  •   MrdotX · 2022-02-14 10:33:04 +08:00 · 4371 次点击
    这是一个创建于 998 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大佬们,http 怎么做可以提升安全性? 一:参数加密 二:增加签名 三:公钥校验 防止中间人攻击

    除了这三种,还有靠谱的方式吗?

    httpbody 可以整体加密进行和服务端交互吗?

    fgwmlhdkkkw
        1
    fgwmlhdkkkw  
       2022-02-14 10:34:16 +08:00
    额,你搜一下 https 就可以了……
    zmxnv123
        2
    zmxnv123  
       2022-02-14 10:34:29 +08:00
    你以为 https 是做什么的
    MrdotX
        3
    MrdotX  
    OP
       2022-02-14 10:36:22 +08:00
    加一句哈,加入不采用公钥校验,被中间人攻击了,这个时候我们可以自己对 body 进行加密什么的吗?
    cmdOptionKana
        4
    cmdOptionKana  
       2022-02-14 10:38:40 +08:00
    目前业界共识是 https 足够安全,而且如果自己另外搞一套加密,极大可能相当于重新发明 https 。对于 https 防不住的情况,可能需要网络以外的手段去辅助,不能依靠 http 本身了。
    Goooler
        5
    Goooler  
       2022-02-14 10:39:38 +08:00
    网易云的接口不就是加密的嘛
    Bromine0x23
        6
    Bromine0x23  
       2022-02-14 10:41:34 +08:00
    可以加密啊,为什么不可以?只不过双方需要协商并实现加解密处理罢了。
    janxin
        7
    janxin  
       2022-02-14 10:43:27 +08:00
    可以
    llsquaer
        8
    llsquaer  
       2022-02-14 10:44:44 +08:00
    如果没猜错, 目的是防止中间人...
    我觉得就算用 js 加密了原始数据..关键解密的还是需要 JS 在浏览器运行..
    破解了 JS.加密在牛也就那样了....
    安全是相对的.. 要么自己改一下浏览器.
    Chinsung
        9
    Chinsung  
       2022-02-14 10:45:03 +08:00
    加密和你说的无关。
    http 一般就 https+报文加签
    银行系统的对外通信,一般都是通过包体加签的方式来保障安全的,报文除了入参之外,额外有个签名字段。
    https 本身不出问题的话,其实 https 就够了
    0zero0
        10
    0zero0  
       2022-02-14 10:45:34 +08:00   ❤️ 1
    想要安全就应该采用业界安全的最佳实践,而不是自己突发奇想搞一套,你自己搞的 100%比不上已经经过真实环境验证和实践的
    cheng6563
        11
    cheng6563  
       2022-02-14 11:00:03 +08:00
    你秘钥怎么发给客户端?
    rrfeng
        12
    rrfeng  
       2022-02-14 11:08:18 +08:00
    如果可以安全分发密钥当然没问题。

    比如硬件 ukey
    yuezk
        13
    yuezk  
       2022-02-14 11:12:02 +08:00   ❤️ 2
    如果要对 HTTP 的传输过程进行加密,用 HTTPS 就可以了。

    如果想对接口的数据格式进行加密,防止别人通过工具抓请求,来分析出接口的调用方法,进而伪造请求的话,就要想办法对请求参数和响应数据进行加密。比如楼上提到的网易云接口,同样的我了解到的支付宝的小程序也是可以配置接口加密的,还有一些银行金融应用,等等。

    对数据加密一般用对称加密算法,这就要双方使用相同的 key 进行加解密( HTTPS 也是用的对称加密算法进行数据的加密,非对称加密算法是用来协商对称加密的 key 的),所以怎么保证 key 的安全性是加密的关键。

    实际项目中,所有把 key 硬编码到客户端的做法都是不安全的,不管是前端代码还是 native 的客户端代码,只是破解难度的大小而已。

    比较靠谱的办法就是参考 HTTPS 的 SSL 握手的过程,使用非对称加密算法协商加密的 key ,然后后续的数据交互中使用这个 key 进行加解密。

    好消息前端项目中也是可以使用的,浏览器已经提供了相关的 API 来实现这个过程( https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto ),GitHub 上也有开源的 library 做了上层的封装( https://github.com/travist/jsencrypt
    jingslunt
        14
    jingslunt  
       2022-02-14 11:37:05 +08:00   ❤️ 1
    js 用 wasm
    xuelu520
        15
    xuelu520  
       2022-02-14 14:39:21 +08:00
    https+额外签名字段就足以。
    如果是 web 浏览器的应用,参数加密没啥意义,纯粹自欺欺人。
    MrdotX
        16
    MrdotX  
    OP
       2022-02-14 16:10:38 +08:00
    @yuezk 感谢大佬,同时也感谢所有参与回复的大家,对 https 安全性又多了一些了解!
    yuezk
        17
    yuezk  
       2022-02-14 16:24:45 +08:00
    @MrdotX #16 不是大佬。其实我说的方案也有点问题。就是虽然可以在浏览器中安全的交换加解密的 key ,但是怎么安全的保存这个 key 是最有挑战性的问题。如果是临时生成,这个 key 必然会保存在某个变量里面,但是如果有人使用开发者工具,在加解密的地方加上断点,那你加密返回的数据格式也一览无余,更何况你的前端代码都是直接暴露给别人的。
    FlyingShark
        18
    FlyingShark  
       2022-02-14 16:35:31 +08:00
    可以的,楼主是打算自己实现还是用别人的,实在不清楚的话要不了解下 S/MIME 这一套玩意,看看开源客户端是怎么实现的
    ZSeptember
        19
    ZSeptember  
       2022-02-14 17:27:08 +08:00
    看你想解决什么问题
    1. 防止中间人攻击,数据安全:直接 https
    2. 反抓包:客户端加密可行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   945 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:40 · PVG 04:40 · LAX 12:40 · JFK 15:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.