首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Coding
V2EX  ›  问与答

前端敏感信息泄露?

  •  
  •   Graves · 38 天前 · 1923 次点击
    这是一个创建于 38 天前的主题,其中的信息可能已经有所发展或是发生改变。
    项目很旧了,2014 年的代码,没有前后分离,后端是 status2+jsp,没有 spring
    因为是政府项目,所以公司找了第三方信息安全公司,做了渗透测试
    现在有一个很头疼的问题,假如有一个用户列表,列表里面有个详细按钮,按钮下面是用户的 id,点击就查询出用户的详细信息,现在第三方信息安全公司改了这个用户 id,就可以获取到其他用户的信息
    这个问题是可以在后端校验,但是代码太旧了,想问问还有其他办法吗
    26 回复  |  直到 2019-11-06 08:50:53 +08:00
        1
    goodname   38 天前
    这是典型的越权啊,前端校验会被绕过啊,不改后端的话,请楼下老哥回答吧
        2
    littleylv   38 天前
    如果不需要限制可以看到哪个或哪些用户的详细信息,那这个并没有风险,因为反正你可以看到所有人的信息(反正你可以点列表 id=2 的人看,你通过把 id=1 改成 id=2 去看的方法不是绕一圈没必要么)

    如果有限制的话,一定要在后台限制校验传入的 id 是否有权限看
        3
    Graves   38 天前
    @goodname 我想到了一个骚操作,因为是 jsp,我把列表 list 放到 session 域下面,然后按钮放数组的下标,到了详细页面的时候再 session 域取出列表,根据下标获取 id,不知道这么做会有什么问题
        4
    Graves   38 天前
    @littleylv 是有权限的,但是祖传代码我改不动,放上去生产,立马用户炸电话过来
        5
    yikyo   38 天前
    id 加密也可以解决。
        6
    littleylv   38 天前
    @yikyo #5 我也想过后端把 id 可逆加密,前端传进来后解密,但硬要说的话还是有风险。比如 A 用户有权限看到 id=1 (加密成了 ABC ),但 B 用户没权限;但如果 B 用户拿到了 ABC,同样可以去看到 id=1
        7
    maichael   38 天前
    既然能筛出列表就说明有权限,有权限就直接根据权限判断不就好了么,建议直接改祖传代码吧,想办法绕只会挖更多的坑。
        8
    Graves   38 天前
    @littleylv 嗯嗯,我也想过这个,后面觉得不可行
        9
    Graves   38 天前
    @maichael 老哥说的也是,实在不行我只能在 sql 最后面 in(列表)
        10
    sevenzhou1218   38 天前
    这个跟前端没关系啊,服务器端代码需要改啊。
    前端能做的就是传两个参数,id 和 hash,hash 是 id 和 secretKey 加密来的,服务器端再解一下...
        11
    imn1   38 天前
    始终要改后端
    简单的就是 id 变无序,是 hash 值,这样前端难以碰撞
    鉴权才是根本
        12
    harvies   38 天前
    服务器需要校验当前用户是否有查看该 ID 数据的权限
        13
    EminemW   38 天前 via iPhone
    我看到的第一眼竟然觉得没有问题。。用户列表根据 id 查详情,不是正常操作吗。
        14
    iyaozhen   38 天前
    典型的水平越权嘛 老代码有啥改不动的,对比一下传的 id 是不是当前用户的 ID
        15
    shehuizhuyi   38 天前
    根据 session 查
        16
    nnnToTnnn   38 天前
    如果是为了应付渗透测试的人可以很好的解决这个,重写页面传值的那个方法,进行对称加密,例如 aes 等等,你随便找个加密算法,然后在点击的在加上另外一个参数 tempid,传过去,判断 tempid 是否和 id 相等,如果是相等则判断是人为修改。


    如果不是 ajax 请求,而是 jsp 请求,直接加上一个 tempid 作为一个暗桩就行了。

    如果是为了对付国内的渗透测试水平我觉得问题还是不大的
        17
    nnnToTnnn   38 天前
    @nnnToTnnn 不是 ajax 请求,而是用 request 传参数,基本上 aes 加密都不用,直接留下 tempid 暗桩。等等
        18
    nnnToTnnn   38 天前
    @nnnToTnnn 还不需要怎么修改祖传的代码,只要稍微加个字段就行,easy
        19
    wccc   38 天前
    Strus2? 我在想 jar 升级过没.. 毕竟漏洞挺多的
        20
    goldenalex   38 天前
    胡乱猜测。。。

    加个加密 session 比对后传输信息?
        21
    iyiluo   38 天前
    别搞自欺欺人的骚操作了,有安全问题就老老实实修,即使应付过了安全扫描,指不定系统哪天就被安全通报
        22
    Graves   38 天前
    @nnnToTnnn 感谢回复,办法是可以,但是渗透的人水平还是很高,会上传文件绕过获取系统 shell

    @wccc struts 已升级的,也是在安全审查中要求整改

    @iyiluo 万般无奈,这东西工作量不大的我清楚,主要是真的改不动代码,接手的时候什么文档也没有,数据库字段没注释,表也只能猜猜干嘛用,改一下到线上就出问题
        23
    Graves   38 天前
    挺自闭的,以前就听别人说祖传代码多恐怖,现在终于见识了
        24
    wangxiaoaer   38 天前 via Android
    暂时用 hashid 这个库把 ID 转成字符(查的时候再逆回来)这个库支持转的时候加盐,你可以每个用户用一个单独的盐放到 session 中。
        25
    beastk   38 天前 via iPhone
    改代码检验 id 吧,最快的方法了
        26
    nnnToTnnn   37 天前
    @Graves 至于上传文件获取系统的 shell,这个限制一下文件类型就行了,在文件解析器里面。 只限制白名单。

    你让他把渗透测试的报告给你一份,然后你按照报告上修改然后测试就行了,一般国内的渗透测试一般都是黑盒测试,拿着软件跑一跑,出一份报告,然后收钱。

    你估计爆出来的都是很明显有特征的漏洞,比如敏感的 id 或者 password 等等字段。


    只要不是百盒测试,基本上改改特征,工具就扫不出来了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1593 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 30ms · UTC 00:44 · PVG 08:44 · LAX 16:44 · JFK 19:44
    ♥ Do have faith in what you're doing.