java 开发安全规范

java 开发安全规范

ID:9803204

大小:92.34 KB

页数:20页

时间:2018-05-10

java 开发安全规范_第1页
java 开发安全规范_第2页
java 开发安全规范_第3页
java 开发安全规范_第4页
java 开发安全规范_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。