目录
1.1、简介:
在Java平台上获取用户提交的输入的方法、与用户会话交互的方式、存在的潜在危险的API以及与安全相关的配置选项
1.2、确定用户提交的数据
简述:
Java应用程序通过javax.servlet.http.HttpServletRequest接口获取用户提交的输入,该接口对javax.servlet.ServletRequest接口进行了扩展。这两个接口中包含了大量Web应用程序用于访问用户提交的数据的AP!
1.3、会话交互
简述:
Java平台应用程序使用javax.servlet.http.HttpSession接口保存和检索当前会话中的信息。每会话存储是字符串名称与对象值之间的一个映射
1.4、潜在危险的API
简述:
以危险的方式使用API可能会造成安全漏洞
文件访问
在Java中,用于访问文件与目录的主要的类为java.io.File。从安全的角度看,这个类的最重要的用法是调用它的构造函数,该构造函数接受一个父目录和文件名,或仅为一个路径名。
无论以哪种方式使用构造函数,如果未检查其中是否包含点-点-斜线序列就将用户可控制的数据作为文件名参数提交,那么可能会造成路径遍历漏洞
数据库访问
常用于以SQL查询执行任何一个字符串的API
java.sql.Connection.createStatement
java.sql.Statement.execute
java.sql.Statement.executeQuery
如果用户提交的数据属于以查询执行的字符串的一部分,那么它可能易于受到SQL注入攻击
动态代码执行
Java语言本身并不包含任何动态评估Java源代码的机制,尽管一些应用提供了评估方法。如果所审查的应用程序动态构建任何Java代码,就应该了解应用程序如何构建这些代码,并决定用户可控制的数据是否以危险的方式使用
OS命令执行
1、API用于在Java应用程序中执行外部操作系统命令
2、如果提交给exec的字符串参数完全由用户控制,那么几乎可以肯定应用程序易于受到任何命令执行攻击,如果用户仅能够控制提交给exec的部分字符串,那么应用程序可能不易于受到攻击
3、有时仅控制部分字符串提交给exec仍然足以执行任意命令,通常在这种情况下,应用程序将易于受到除代码执行以外的攻击。如果应用程序以用户可控制的参数作为目标URL执行wget程序,那么攻击者就可以向wge进程传递危险的命令行参数,如致使它下载一个文档,并将该文档保存在文件系统中的任何位置
URL重定向
1、一些API用于在Java中发布HTTP重定向
2、通常使用sendRedirect方法可以引起一个重定向响应,该方法接受一个包含相对或绝对URL的字符串。如果这个字符串的值由用户控制,那么应用程序可能易于受到钓鱼攻击
3、还应该审查setStatus与addHeader API的所有用法,如果某个重定向包含一个含有HTTP Location消息头的3xx响应,应用程序就可能使用这些API执行重定向
套接字
java.net.Socket类从它的构造函数中提取与目标主机和端口有关的各种信息,如果用户能够以某种方式控制这些信息攻击者就可以利用应用程序与任意主机建立网络连接,无论这些主机位于因特网上、私有DMZ中还是在应用程序上运行的内部网络内
配置Java环境
1、web.xml文件包含Java平台环境的配置设置,同时它还控制着应用程序的行为,如果应用程序使用容器安全管理,那么验证与授权将在web.xml文件中,根据被保护的每一个资源或资源集,于应用程序代码以外声明
2、Servlet可以使用HttpServletRequest.isUserInRole访问Servlet代码中的相同角色信息,实施编程检查,映射项security-role-ref将内置的角色检查与对应的容器角色连接起来。
3、除web.xml文件外,不同应用程序服务器还可能使用包含其他安全相关设置的次要部署文件(如weblogic.xml文件),当分析环境配置时,应检查这些设置