欢迎来到天天文库
浏览记录
ID:9803204
大小:92.34 KB
页数:20页
时间:2018-05-10
《java 开发安全规范》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Java开发安全规范目录一.安全隐患11.1ProcessBuilder注入允许攻击者执行代码11.2确保public和static字段被定义为final11.3包含敏感调用的方法应标记为final21.4执行数据库查询前设置查询类型31.5实现Serializable接口时没有定制序列化协议31.6限制特权代码的可访问性41.7确保SecurityManager权限检查的完整性61.8避免在public方法中返回private内部数据81.9避免危险的publicstaticfinal数组声明8二.环境配置92.1不要将多类URL映射到同一个Servlet92.2不
2、要在配置文件中存放敏感信息92.3确保Servlet有名字并正确配置102.4限制字段最大长度避免DoS或注入攻击11三.代码质量123.1谨慎使用Thread.yield()方法123.2使用notifyAll方法替代notify133.3避免使用Thread的stop方法133.4重新抛出ThreadDeath异常133.5确保锁在发生异常时被正确释放143.6避免在获取锁后调用sleep方法163.7避免在finally块中抛出异常16四.安全特性174.1确保密码学加密算法密钥强度174.2避免使用过时的加密算法174.3避免使用不安全的填充(Padding)
3、模式174.4避免使用弱初始化向量(InitializationVector)174.5不要依赖isSecure()方法来决定是否传递敏感信息184.6在敏感信息不再需要时显式清除它18-I-一.安全隐患1.1ProcessBuilder注入允许攻击者执行代码与Runtime类相似,如果ProcessBuilder对象根据不可信输入被构造,则有可能被攻击者用来进行命令注入攻击。错误的用法:publicstaticvoidexecUsingCommand(Stringcommand)throwsException{String[]args=newString[]{"cm
4、d","/c","dir"+command};Processprocess=newProcessBuilder().command(args).start();InputStreamis=process.getInputStream();InputStreamReaderisr=newInputStreamReader(is);BufferedReaderbr=newBufferedReader(isr);Stringline;while((line=br.readLine())!=null){System.out.println(line);}}在上述代码中,如果c
5、ommand参数来自不可信输入,如网页请求参数或请求URL,则代码存在命令注入漏洞。攻击者可以通过构造一个恶意输入,例如“/home/user&&rm/app/config”,通过命令行同时执行多条命令。正确的做法是永远不要使用不可信输入构造ProcessBuilder对象,可以通过预定义可能的命令行列表,并根据用户输入来选择执行。1.2确保public和static字段被定义为final如果一个public和static的字段,没有被定义为final,则不受信任的代码有可能通过修改此字段,影响对象的状态,造成潜在的攻击可能性。错误的用法:publicclassMyC
6、lass{publicstaticintcounter=123;-18-//...}正确的用法:publicclassMyClass{publicstaticfinalintcounter=123;//...}1.1包含敏感调用的方法应标记为final如果一个class没有被标记为final,那么他的所有方法都可以被重载(override)。如果它的一个方法调用了SecurityManager进行特权检查或其他敏感操作,例如AccessController.doPrivileged等,则应确保此方法被标记为final,否则可能被恶意使用者通过重载此方法,跳过预设的检测
7、逻辑。错误的用法:publicclassBadSecurityCheck{privateintid;publicBadSecurityCheck(){securityCheck();id=1;}protectedvoiddoSecurityCheck(){SecurityManagersm=System.getSecurityManager();if(sm!=null){sm.checkPermission(newSomePermission("SomeAction"));}}}正确的用法:publicfinalclassGoodSecurityCh
此文档下载收益归作者所有