阿里巴巴 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 包)。
法律声明 本手册为阿里巴巴集团技术部的技术分享,版权归阿里巴巴集团所有,仅供大家交流、学习及研究 使用,禁止用于商业用途,违者必究。
阿里巴巴 Java 开发手册 (十二)安全规约的更多相关文章
- 阿里巴巴 Java 开发手册(二): 常量定义
1. [强制]不允许任何魔法值(即未经定义的常量)直接出现在代码中. 反例: String key = "Id#taobao_" + tradeId; cache.put(key, ...
- 阿里巴巴 Java 开发手册 1.4.0
一.编程规约(一) 命名风格1. [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.反例: _name / __name / $name / name_ / name$ ...
- 读阿里巴巴Java开发手册v1.2.0之编程规约有感【架构篇】
不为过去蹉跎,改变当下. 为什么开篇就送这么一句话给大家,我相信很多处于1-3年码龄的哥们儿们,在平时的编码历程中编码的个性可能是多彩的,每个人都有每个人特定的风格,但是我们现在这么随意写,以后这么 ...
- 《阿里巴巴Java开发手册v1.2》解析(编程规约篇)
之前在乐视天天研究各种底层高大上的东西,因为我就一个人,想怎么弄怎么弄.如今来了新美大,好好研读一下<阿里巴巴Java开发手册v1.2>.还要对这么看似简单的东西解析一番.毕竟现在带团队, ...
- 阿里巴巴Java开发手册及Java代码规约扫描eclipse和IDEA插件
<阿里巴巴Java开发手册>: https://github.com/alibaba/p3c/blob/master/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B ...
- 【阿里巴巴Java开发手册1.7.0(嵩山版)】编程规约&MySQL 数据库规约
阿里巴巴Java开发手册1.7.0(嵩山版) 一.编程规约 (一)命名风格 所有命名不得以下划线和$开始和结束. 所有命名不得以拼音或拼音英文混合. 类名使用UpperCamelCase风格. 方法名 ...
- 《阿里巴巴 Java 开发手册》读书笔记
偶然看到阿里巴巴居然出书了???趁着满减活动(节约节约....)我赶紧买来准备看看,刚拿到的时候掂量了好多下,总觉得商家给我少发了一本书,结果打开才知道..原来这本书这么小.... 编码规范的重要性 ...
- 阿里巴巴Java开发手册正确学习姿势是怎样的?刷新代码规范认知
很多人都知道,阿里巴巴在2017发布了<阿里巴巴Java开发手册>,前后推出了很多个版本,并在后续推出了与之配套的IDEA插件和书籍. 相信很多Java开发都或多或少看过这份手册,这份手册 ...
- 阿里巴巴Java开发手册———个人追加的见解和补充(一)
先上干货,<阿里巴巴Java开发手册>的下载地址 https://yq.aliyun.com/articles/69327?spm=5176.100239.blogcont69327.15 ...
- 阿里巴巴Java开发手册评述
2016年底的时候阿里巴巴公开了其在内部使用的Java编程规范.随后进行了几次版本修订,目前的版本为v1.0.2版.下载地址可以在其官方社区-云栖社区https://yq.aliyun.com/art ...
随机推荐
- Golang 接口
1 接口是什么 Golang中没有像Python.Java拥有类和对象的概念,其封装对象或说明对象是通过接口来实现的.比如谁能够实现什么样的功能,便能够将其抽象化封装. 接口定义了一组方法(抽象方法集 ...
- mybatis多参数查询问题:org.apache.ibatis.binding.BindingException: Parameter 'name' not found. Available par
错误如下: 这个是由于在执行sql的时候无法匹配sql语句的通配符造成的,有两种方式可以解决 第一种:在sql语句中通配符这样写,用0,1匹配: 第二种:在dao接口的方法中的参数前面加param ...
- web: 屏蔽button元素的空格键和enter响应
用tab键可以在各种元素之间切换焦点,然后键盘上的空格和enter按键触发click事件,我这里不想要这种效果. 所以我需要屏蔽这两个按键. function keyup(e) { var currK ...
- [技术博客] SPRINGBOOT自定义注解
SPRINGBOOT自定义注解 在springboot中,有各种各样的注解,这些注解能够简化我们的配置,提高开发效率.一般来说,springboot提供的注解已经佷丰富了,但如果我们想针对某个特定情景 ...
- js中[object Object]与object.prototype.toString.call()
最近在用node读取文件中的json数据后,用JSON.parse()转成了json,然后响应数据传给前端,发现输出值object对象时显示[object object],在这里我们来看一下他的具体意 ...
- 简述 IntentFilter(意图过滤器)
1.什么是IntentFilter ? IntentFilter翻译成中文就是“意图过滤器”,主要用来过滤隐式意图.当用户进行一项操作的时候,Android系统会根据配置的 “意图过滤器” 来寻找可以 ...
- Sketch2Code - Transform sketches into HTML using AI
Sketch2Code - Transform sketches into HTML using AI https://sketch2code.azurewebsites.net/generated- ...
- Canal - 数据同步 - 阿里巴巴 MySQL binlog 增量订阅&消费组件
背景 早期,阿里巴巴 B2B 公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求 ,主要是基于trigger的方式获取增量变更.从 2010 年开始,公司开始逐步尝试数据库日志解析,获取增量变 ...
- 【转】WPF DataGridComboBoxColumn使用
若要填充下拉列表,请首先使用下列选项之一设置 ComboBox 的 ItemsSource 属性.静态资源. x:Static 代码实体.ComboBoxItem 类型的内联集合.实现效果如下: 如需 ...
- LeetCode 112. Path Sum(路径和是否可为sum)
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...