阿里巴巴 Java 开发手册 (十二)安全规约
1. 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。 说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信 内容、修改他人的订单。
2. 【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。 说明:查看个人手机号码会显示成:158****9119,隐藏中间 4 位,防止隐私泄露。
3. 【强制】用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入, 禁止字符串拼接 SQL 访问数据库。
4. 【强制】用户请求传入的任何参数必须做有效性验证。 说明:忽略参数校验可能导致:
page size 过大导致内存溢出 恶意 order by 导致数据库慢查询 任意重定向 SQL 注入 反序列化注入 正则输入源串拒绝服务 ReDoS
说明:Java 代码用正则来验证客户端的输入,有些正则写法验证普通用户输入没有问题, 但是如果攻击人员使用的是特殊构造的字符串来验证,有可能导致死循环的结果。
5. 【强制】禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据。
6. 【强制】表单、AJAX 提交必须执行 CSRF 安全过滤。 说明:CSRF(Cross-site request forgery)跨站请求伪造是一类常见编程漏洞。对于存在 CSRF 漏洞的应用/网站,攻击者可以事先构造好 URL,只要受害者用户一访问,后台便在用户 不知情情况下对数据库中用户参数进行相应修改。
7. 【强制】在使用平台资源,譬如短信、邮件、电话、下单、支付,必须实现正确的防重放限制, 如数量限制、疲劳度控制、验证码校验,避免被滥刷、资损。 说明:如注册时发送验证码到手机,如果没有限制次数和频率,那么可以利用此功能骚扰到其 它用户,并造成短信平台资源浪费。
8. 【推荐】发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过 滤等风控策略。
附 1:版本历史
版本号 更新日期 备注
1.0.0 2017.2.9 阿里巴巴集团正式对外发布
1.0.1 2017.2.13 1)修正 String[]的前后矛盾。2)vm 修正成 velocity。3)修正 countdown 描述错误。
1.0.2 2017.2.20
1)去除文底水印。2)数据类型中引用太阳系年龄问题。3)修正关于异常和方法签名的部
分描述。4)修正 final 描述。5)去除 Comparator 部分描述。
1.1.0 2017.2.27
1)增加前言。2)增加<? extends T>描述和说明。3)增加版本历史。4)增加专有名词
解释。
1.1.1 2017.3.31 修正页码总数和部分示例。
1.2.0 2017.5.20
1)根据云栖社区的“聚能聊”活动反馈,对手册的页码、排版、描述进行修正。2)增加 final
的适用场景描述。3)增加关于锁的粒度的说明。4)增加“指定集合大小”的详细说明以及
正反例。5)增加卫语句的示例代码。6)明确数据库表示删除概念的字段名为 is_deleted
附 2:本手册专有名词
1. POJO(Plain Ordinary Java Object):在本手册中,POJO 专指只有 setter / getter / toString 的简单类,包括 DO/DTO/BO/VO 等。
2. DO(Data Object):本手册指数据库表一一对应的 POJO 类。
3. GAV(GroupId、ArtifactctId、Version):Maven 坐标,是用来唯一标识 jar 包。
4. OOP(Object Oriented Programming): 本手册泛指类、对象的编程处理方式。
5. ORM(Object Relation Mapping): 对象关系映射,对象领域模型与底层数据之间的转换, 本文泛指 iBATIS, mybatis 等框架。
6. NPE(java.lang.NullPointerException): 空指针异常。
7. SOA(Service-Oriented Architecture): 面向服务架构,它可以根据需求通过网络对松散 耦合的粗粒度应用组件进行分布式部署、组合和使用,有利于提升组件可重用性,可维护性。
8. 一方库:本工程内部子项目模块依赖的库(jar 包)。
9. 二方库:公司内部发布到中央仓库,可供公司内部其它应用依赖的库(jar 包)。
10. 三方库:公司之外的开源库(jar 包)。
法律声明 本手册为阿里巴巴集团技术部的技术分享,版权归阿里巴巴集团所有,仅供大家交流、学习及研究 使用,禁止用于商业用途,违者必究。
最新文章
- C#中常用的系统内置委托
- FastDFS.Client操作文件服务器
- 学习django之构建Web是Meta嵌套类的几处使用
- iOS开发之多线程技术——GCD篇
- Java排序算法——归并排序
- 用批处理启动MySQL命令行工具
- SQL Server 2014里的IO资源调控器
- 深入了解A*
- mvc无法找到资源
- yum install 与 yum groupinstall 的区别
- curl 报错记录,mark
- codeforces 630B Moore&#39;s Law
- 12232 - Exclusive-OR
- FZU 2086 餐厅点餐
- MFC消息机制
- 关于启动文件分析的(MDK-ARM) 【转】
- PHP_保留两位小数并且四舍五入_保留两位小数并且不四舍五入
- Python猜数小游戏
- python 字符串转16进制函数
- Python学习笔记【第五篇】:基础函数
热门文章
- AngularJS实现地址栏取值
- ssh 可以登录但是 sftp 不能登录的解决办法
- [Beta阶段]第四次Scrum Meeting
- hbuilderx - 常用快捷键操作
- How to Use Convolutional Neural Networks for Time Series Classification
- JPA的查询方法总结
- C#-关于TcpListener的AcceptTcpClient()方法造成线程阻塞,进而程序无法彻底关闭的问题
- Proj.4 升级新版本5.x和6.x
- WebRTC搭建前端视频聊天室——信令篇
- C#中如何获取系统文件及操作系统的环境变量等