JAVA Web应用常见漏洞与修复建议

最近负责的项目参与了甲方要求的代码审计,扫出来不少问题,46w+行代码扫出来81种漏洞,涉及1w+行代码,不良代码率高达2.93%,也确实反应了不少问题,这里贴出来供大家参考

目录

跨站脚本

高危:存储型XSS

高危:反射型XSS

输入验证

高危:路径遍历

高危:基于DOM的XSS

高危:重定向

中危:拒绝服务:正则表达式

中危:访问权限修饰符控制

中危:直接绑定敏感字段

低危:拒绝服务:解析Double类型数据

低危:有风险的资源使用

低危:数据跨越信任边界

低危:文件上传

代码注入

中危:HTTP响应截断

中危:有风险的SQL查询:MyBatis

中危:公式注入

中危:资源注入

中危:HTTP响应截断

低危:有风险的反序列化 

低危:JavaScript劫持:易受攻击的框架 

API误用

中危:不安全的框架绑定

低危:忽略返回值

低危:HTTP响应完成后继续操作输出流

低危:缺少对方法返回值的null检查

密码管理

中危:不安全的随机数

中危:空密码

中危:硬编码密码

中危:弱加密

中危:配置文件中的明文密码

中危:硬编码加密密钥 

低危:注释中的密码

低危:不安全的哈希算法

低危:弱加密:不安全的块密码加密模式 

低危:不安全的随机数 

低危:注释中的密码

资源管理

中危:数据库访问控制

中危:资源未释放:流 

中危:使用不安全的target blank 

代码质量

中危:使用==或!=比较基本数据类型的包装类

中危:比较Locale相关的数据未指定适当的Locale

中危:null引用

中危:系统信息泄露:Session传递

低危:JavaEE程序:直接使用线程

低危:JavaEE程序:遗留的调试代码

低危:日志记录:使用系统输出流

低危:使用==或!=比较字符串

低危:硬编码文件分隔符

低危:使用浮点数进行精确计算

低危:系统信息泄露:内部

低危:试图重写静态方法

低危:系统信息泄露:标准错误流

低危:泛化的捕获异常

低危:泛化的抛出异常

低危:表达式永远为false

低危:表达式永远为true

低危:未使用的字段

低危:未使用的方法 

低危:冗余的初始化

低危:未使用的值

低危:冗余的null检查

低危:使用equals()来判断字符串是否为空

低危:循环中拼接字符串

低危:创建Boolean对象

低危:byte数组转String时未指定编码

低危:侵犯隐私 

低危:switch语句中缺少default语句

低危:可序列化类中存在可序列化的敏感信息

低危:空的方法

低危:空的代码块

低危:无用的分号

低危:错误的参数顺序

低危:隐藏的表单字段

低危:侵犯隐私:自动补全

低危:遗留的调试代码

异常处理

低危:捕获NullPointerException

低危:finally代码块中抛出异常

低危:空的catch代码块(1)

低危:空的catch代码块(2)

跨站脚本

低危:跨站请求伪造


跨站脚本

高危:存储型XSS

存储型XSS是指应用程序通过Web请求获取不可信赖的数据,并且在未检验数据是否存在XSS代码的情况下,将其存入数据库。当程序下一次从数据库中获取该数据时,致使页面再次执行XSS代码。存储型XSS可以持续攻击用户,在用户提交了包含XSS代码的数据存储到数据库后,每当用户在浏览网页查询对应数据库中的数据时,那些包含XSS代码的数据就会在服务器解析并加载,当浏览器读到XSS代码后,会当做正常的HTML和JS解析并执行,于是发生存储型XSS攻击。

**例如**:下面JSP代码片段的功能是根据一个已知用户雇员ID(id)从数据库中查询出该用户的地址,并显示在JSP页面上。

<%
...
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from users where id =" + id);
String address = null;
if (rs != null) {
    rs.next();
    address = rs.getString("address");
}
%>
家庭地址: <%= address %>

如果address的值是由用户提供的,且存入数据库时没有进行合理的校验,那么攻击者就可以利用上面的代码进行存储型XSS攻击。

修复建议

为了避免存储型XSS攻击,建议采用以下方式进行防御:

1.对从数据库或其它后端数据存储获取不可信赖的数据进行合理验证(如年龄只能是数字),对特殊字符(如`<、>、'、"`以及`

你可能感兴趣的:(java,前端,系统安全,web安全,数据库,sql)