2. 阿里巴巴Java开发手册主题 - 安全

  • 强制
    • 隶属于用户个人的页面或者功能必须进行权限控制校验
      • 说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容、修改他人的订单。
      • 经验:水平权限问题
        • 攻击者可以根据接口参数中的id加1等操作,来获取其他用户的权限或数据。
          • 水平权限参数不要用自增值,用id加密、随机数或GUID,但搜索引擎或攻击者可以同样用这个随机数和连接去进行操作
          • web层检查发起请求的用户权限,比如从session信息中获取
          • 数据库表增加ownerId字段,增删改查询时加上其作为where语句条件(即每一个信息增加一个发布人的字段,修改的人必须与发布的人为同一个人才可以访问)
        • 横向越权与纵向越权
          • 横向越权指的是攻击者尝试访问与他拥有相同权限的用户的资源
            • 可通过建立用户和可操作资源的绑定关系,用户对任何资源进行操作时,通过该绑定关系确保该资源是属于该用户所有的(前面说的ownerId?)。
            • 对请求中的关键参数进行间接映射,避免使用原始关键参数名,比如使用索引1代替id值123等
          • 纵向越权指的是一个低级别攻击者尝试访问高级别用户的资源
            • 建议使用基于角色访问控制机制来防止纵向越权攻击,即预先定义不同的权限角色,为每个角色分配不同的权限,每个用户都属于特定的角色,即拥有固定的权限,当用户执行某个动作或产生某种行为时,通过用户所在的角色判定该动作或者行为是否允许。
            • RDBC?
        • 垂直权限问题
          • Web应用没有做权限控制,或仅仅在菜单上做了权限控制,导致恶意用户只要猜到了其他页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
            • 只需要对url资源进行权限验证即可。
    • 用户敏感数据禁止直接展示,必须对展示数据进行脱敏
      • 说明:中国大陆个人手机号码显示为:137****0969,隐藏中间4位,防止隐私泄露。
      • 经验:尤其对于大家都能访问的公共页,比如在主页公布中奖名单。
      • 经验:后端传过来的就要是脱敏的,不要让前端做,否则恶意用户依然可以从网络请求中看到敏感数据。
    • 用户请求传入的任何参数必须做有效性验证
      • 说明:忽略参数校验可能导致:
        • page size过大导致内存溢出
        • 恶意order by导致数据库慢查询
        • 任意重定向
        • SQL注入
        • 反序列化注入
        • 正则输入源串拒绝服务ReDoS
      • 说明:Java代码用正则来验证客户端的输入,有些正则写法验证普通用户输入没有问题,但是如果攻击人员使用的是特殊构造的字符串来验证,有可能导致死循环的结果。
    • 用户输入的SQL参数严格使用参数绑定或者METADATA字段值限定,防止SQL注入,禁止字符串拼接SQL访问数据库。
    • 禁止向HTML页面输出未经安全过滤或未正确转义的用户数据。
      • 经验:但是对于CMS或者本身需求上就要支持富文本的情况,可能就要正常输出了一些合法的特殊字符了。
    • 表单、AJAX提交必须执行CSRF安全验证
      • 说明:CSRF(Cross-site request forgery)跨站请求伪造是一类常见编程漏洞。对于存在CSRF漏洞的应用/网站,攻击者可以事先构造好URL,只要受害者用户一访问,后台便在用户不知情的情况下对数据库中用户参数进行相应修改。
    • 在使用平台资源,譬如短信、邮件、电话、下单、支付,必须实现正确的防重放的机制,如数量限制、疲劳度控制、验证码校验,避免被滥刷而导致资损。
  • 推荐
    • 发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过滤等风控策略

posted on 2019-11-21 09:37  碎羽love星谊  阅读(433)  评论(0编辑  收藏  举报

导航