《阿里巴巴 Java 开发手册》涉及安全部分讲解

本贴最后更新于 2669 天前,其中的信息可能已经天翻地覆

《阿里巴巴 Java 开发手册》可以作为编码风格、规范、要约的最佳实践,在阅读过程中,有一部分质量方面的规范涉及安全,提取出来分享下。
0.【推荐】类成员与方法访问控制从严
java 的访问控制可以通过 private、protect 关键字,避免被外部反射机制调用实现。
1) 如果不允许外部直接通过 new 来创建对象,那么构造方法必须是 private。
如果构造方法是 private,则外部 new 时,编译器检查为 The constructor PrivateTool() is not visible,需要设置为一定的权限,default 则为 package 访问权限

public class PrivateTool {

private PrivateTool() {

// TODO Auto-generated constructor stub

}

}

2) 工具类不允许有 public 或 default 构造方法。
这样的工具类不够优雅
3) 类非 static 成员变量并且与子类共享,必须是 protected。
保持类与子类的成员变量的权限一致
4) 类非 static 成员变量并且仅在本类使用,必须是 private。
5) 类 static 成员变量如果仅在本类使用,必须是 private。
6) 若是 static 成员变量,必须考虑是否为 final。
7)类成员方法只供类内部调用,必须是 private。
8) 类成员方法只对继承类公开,那么限制为 protected。

以上比较详细的说明了关键字的使用方法。

  1. 【推荐】避免 Random 实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一 seed 导致的性能下降。
    java.util.Random 的实例或者 Math.random()的 seed 唯一(),来自于系统时间的通过线性同余公式产生,所以在获取大量的值时,攻击者可以预测 seed 值,继而计算出随机数。推荐使用 java.security.SecureRandom

  2. 【推荐】在并发场景下,通过双重检查锁(double-checked locking)实现延迟初始化的优 化问题隐患(可参考 The "Double-Checked Locking is Broken" Declaration),推荐解 决方案中较为简单一种(适用于 JDK5 及以上版本),将目标属性声明为 volatile 型*
    参考 https://race604.com/java-double-checked-singleton/?from=timeline

  3. 【推荐】接口入参保护,这种场景常见的是用于做批量操作的接口。
    对接口入参必须进行校验,包括对外提供的开放接口,不管是 RPC/API/HTTP 接口。敏感权限入口。
    【强制】对 trace/debug/info 级别的日志输出,必须使用条件输出形式或者使用占位符的方 式。
    日志系统不使用占位符的话,可能发生 CRLF 注入的风险。

  4. 【参考】可以使用 warn 日志级别来记录用户输入参数错误的情况,避免用户投诉时,无所适 从。注意日志输出的级别,error 级别只记录系统逻辑出错、异常等重要的错误信息。如非必 要,请不要在此场景打出 error 级别。
    考虑到 twitter 的案例,遵循合法合规要求,需要避免在日志中记录银行卡、身份证、密码、token、cookie 等敏感信息。参考案例:http://www.anquan.us/static/bugs/wooyun-2014-055359.html

  5. 安全规约
    【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。
    目前的订单越权、遍历等 web 安全问题增多,需要对与此类平行权限问题予以重点考虑。

  6. 【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。
    同时也需要对打码字段定义统一的标准,如果 A 应用对打码 158****9119,而 B 应用只显示前 7 位,称为打码不严,也是一种信息安全隐患。

  7. 【强制】用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入, 禁止字符串拼接 SQL 访问数据库。
    参数绑定是 ORM 的说法,可以通过强制类型语言的特性避免一些恶意输入,底层采用 JDBC 的 PreparedStatement 预定义 sql 功能,本意是为了提高效率,因为 mysql 给字符串转移,所以达到了防止 sql 注入的目的,参考 https://blog.csdn.net/xieyuooo/article/details/10732375?utm_source=itdadao&utm_medium=referral

  8. 【强制】用户请求传入的任何参数必须做有效性验证。 说明:忽略参数校验可能导致:  page size 过大导致内存溢出  恶意 order by 导致数据库慢查询  任意重定向  SQL 注入  反序列化注入  正则输入源串拒绝服务 ReDoS 说明:Java 代码用正则来验证客户端的输入,有些正则写法验证普通用户输入没有问题, 但是如果攻击人员使用的是特殊构造的字符串来验证,有可能导致死循环的结果。
    攻击人员的思路同开发迥然不同,会考虑破坏系统机密性、完整性、可用性的恶意触发点。通过污点分析的技术判断代码污染源即是考虑到一切来源于用户的输入都是不可信的。

  9. 【强制】禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据。
    实际使用中,可以使用 json 格式工具类往页面输出内容。xss 的场景很复杂,采用过滤和转义手段时,要采用组织内部的安全 api 或者专业的 esapi,避免自己实现。

  10. 【强制】表单、AJAX 提交必须执行 CSRF 安全过滤
    csrf、cors 跨域资源配置不当的安全问题逐步增多,目前对于表单提交的 csrf 需要强烈关注,其实 login csrf,查询、删除时的 csrf 也需要适当处理。

  11. 【强制】在使用平台资源,譬如短信、邮件、电话、下单、支付,必须实现正确的防重放限制, 如数量限制、疲劳度控制、验证码校验,避免被滥刷、资损。
    验证码可以在短信网关限制单人单天不超过一定的次数,通过要建立短信模板,避免攻击者越权自定义短信内容带来安全风险。验证码可以采用 6 位数字 + 字母的组合,并及时销毁。

  12. 【推荐】发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过滤等风控策略。
    文本、图片等内容安全已经有了多种开放服务,可以快速接入保证风控效果。

  13. 【强制】sql.xml 配置参数使用:#{},#param# 不要使用 ${} 此种方式容易出现 SQL 注入。
    实践中遇到的问题是有业务会模糊查询、动态 sql,这种情况需要进行过滤。

  • 安全

    安全永远都不是一个小问题。

    201 引用 • 818 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3204 引用 • 8217 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    46 引用 • 114 回帖 • 141 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 398 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1446 引用 • 10084 回帖 • 497 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    89 引用 • 1251 回帖 • 390 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖 • 1 关注
  • 自由行
    6 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    45 引用 • 44 回帖
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 2 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 422 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 94 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖 • 1 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    240 引用 • 224 回帖 • 2 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 443 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    293 引用 • 4496 回帖 • 664 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    90 引用 • 113 回帖
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 750 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 651 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 4 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 230 关注
  • Office

    Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。

    5 引用 • 34 回帖
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 119 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    193 引用 • 3961 回帖 • 4 关注
  • 分享

    有什么新发现就分享给大家吧!

    249 引用 • 1799 回帖