了解系统输入数据验证过程中的安全注意事项,以及转换和传输过程中的安全注意事项 军规A0:清理验证跨安全域非信任的数据 军规A1:验证前使字符串归一化 军规A2:路径验证前对其进行标准化处理 军规A3:防范日志注入攻击 军规A4:防范ZIP炸弹攻击 军规A5:使用ASCII码的子集作为文件路径名 军规A6:从格式化串中去除用户输入数据 军规A7:防范命令行注入攻击 军规A8:清理正则表达式中不可信输入数据 军规A9:防范地区敏感的字符串操作错误 军规A10:不要通过byte数组进行字符切割 军规A11:验证前删除非字符码点 军规A12:在不同字符编码格式之间执行无损转换 军规A13:在文件与网络IO操作的两端采用兼容的字符编码格式
了解对象声明与初始化过程中安全陷阱与防范方法 军规B0:阻止类的初始化循环 军规B1:不要重用Java标准库中的公开标识符 军规B2:将增强for循环中的变量声明为final
了解表达式安全注意事项 军规C0:不要忽视方法的返回值 军规C1:不要引用空指针 军规C2:使用具有双参数的Array.equals()比较两个数组的内容 军规C3:比较初始类型值的包装对象时不要使用==和!=操作符 军规C4:确保自动包装产生正确的对象类型 军规C5:不要在同一个表达式中对同一个变量进行多次更改 军规C6:不要调试断言中使用具有副作用的表达式
了解数字类型变量声明和操作中的各种安全问题及其防范方法 军规D0:整数溢出的检查与预防 军规D1:不要对同一数据同时执行位操作和数据运算操作 军规D2:避免除法或求余运算中除数为0 军规D3:使用能覆盖无符号整数范围的整型数据来读取JNI无符号数据 军规D4:float浮点数不能满足精确计算要求 军规D5:不要使用非正常浮点数 军规D6:浮点数运算跨平台一致性 军规D7:不要试图与NaN进行比较 军规D8:检查浮点数输入中的异常情况 军规D9:不要使用浮点数为循环计数器 军规D10:不要使用阿拉伯数字表达的浮点数构造BigDecimal对象 军规D11:不要与浮点数字符串进行比较 军规D12:保证降低转化不会导致数据损失或数据错误 军规D13:转变整数为浮点数时避免损失精度
了解对象声明,继承,传递过程中的各种安全问题及其防范方法 军规E0:限制对有固定逻辑的类和方法进行扩展 军规E1:宣称属性值为private并提供属性访问方法 军规E2:更新父类时保持子类的依赖性 军规E3:不要在新代码中把简单类型和泛化类型混用 军规E4:为易变对象提供Copy方法 军规E5:返回内部易变属性的copy 军规E6:保护性复制易变输入对象和内部对象 军规E7:敏感类应该有防复制功能 军规E8:不要将外层类的私有属性在嵌套类中暴露 军规E9:比较类本身而非类名 军规E10:不要使用public static变量 军规E11:不要让构造函数抛出异常
了解类方法实现过程中的各种安全问题及避免方法 军规F0:验证方法的输入参数 军规F1:不要使用assert验证输入参数 军规F2:不要使用废弃的或过期的类和方法 军规F3:执行安全检查的方法必须要声明为private或final 军规F4:不要增加被覆盖、隐藏方法的可见性 军规F5:保证构造函数不要调用可覆盖方法 军规F6:不要在clone()函数中调用可覆盖方法 军规F7:不要去声明一个隐藏超类或超接口方法的类方法 军规F8:保证相等的对象在运算时保持相等性 军规F9:equals()方法和hashCode()方法应该同时定义 军规F10:实现compareTo()方法时要满足一般约定 军规F11:确保用于比较操作的键
了解异常处理中的安全问题及防范方法 军规G0:不要抑制或忽略异常 军规G1:不要让异常暴露了敏感信息 军规G2:在记录log时防范异常 军规G3:方法失败时恢复先前对象的状态 军规G4:不要在finally语句中任意退出 军规G5:不要让异常从finally语句中溜走 军规G6:不要抛出没有声明的异常 军规G7:不要抛出RuntimeException, Exception, or Throwable 军规G8:不要去捕获NullPointerException和他的任何父异常类 军规G9:不要让非受信代码停止JVM
了解共享变量访问和复合操作原子性相关的安全问题及其防范方法 军规H0:访问初级类型共享变量时保证可见性 军规H1:保证不可变对象共享参考指针的可见性 军规H2:确保对共享变量的复合操作具有原子性 军规H3:不要假定一组相互独立的原子性方法的调用在整体上具有原子性 军规H4:确保链状方法调用的原子性 军规H5:读写64位值时保证原子性
了解输入输出中安全问题及其防范方法 军规I0:对与非信任代码交互的类进行同步要使用私有不变对象锁 军规I1:不要对可重用对象进行同步加锁 军规I2:不要对通过getClass返回的Class对象进行同步加锁 军规I3:不要在高并发访问对象的内在锁上同步 军规I4:如果底层集合可访问就不要对集合视图进行同步加锁 军规I5:非信任代码可以修改对静态属性的同步访问 军规I6:不要对实例对象加锁去保护静态数据 军规I7:以同样的顺序请求和释放锁以避免死锁 军规I8:确保在异常情况下的持有锁能够被释放 军规I9:持有锁时不要执行具有阻塞可能的操作 军规I10:不要使用不正确的双重检查锁定机制 军规I11:当使用的类不遵循既有锁定策略时避免客户端锁定
了解序列化过程中的安全问题及防范方法线程API系列军规 军规J0:不要调用Thread.run() 军规J1:不要调用ThreadGroup中的方法 军规J2:通知所有等待线程而非单个线程 军规J3:总是在循环中调用wait()和await()方法 军规J4:确保执行阻塞操作的线程能被终止 军规J5:不要使用Thread.stop()终止线程
了解线程池安全相关安全问题及其防范方法 军规K0:在请求爆发时用线程池对服务质量进行体面降级 军规K1:不要在有界线程池中执行相互依赖的任务 军规K2:保证提交给线程池的任务是可中断的 军规K3:保证提交给线程池的任务是可中断的 军规K4:当使用线程池时确保ThreadLocal变量被重新初始化
了解Java线程相关的其他安全问题及其防范方法 军规L0:不要用非线程安全的方法覆盖线程安全的方法 军规L1:对象构造期间不要暴露this指针 军规L2:对象初始化时不要使用守护线程 军规L3:不要发布半初始化对象
培训特点: 以企业切实需求为目的 透彻讲解并辅以充足示例代码
培训收益: 具体来说,可以使学员在以下方面有所提高: 可以全方位了解Java开发过程中遇到的各种容易忽视的安全问题,及其防范方法。可以在今后的开发过程中有意识的避免各种安全问题,提高代码质量。
培训对象: 该课程的主要培训对象为: 有一定Java开发经验的研发人员
谷安天下培训顾问:徐金梅 联系手机:13410883634 联系座机:0755-82024056-801 QQ:806050486 邮箱:xujinmei@gooann.com 公司地址:深圳市南山区桃园路金桃园大厦金馨阁19E
|