未使用HTTPS
漏洞定义
- HTTP是超文本传输协议,信息是明文传输,传输的内容容易被攻击者通过工具嗅探网络获得,导致用户的敏感信息泄漏。
修复建议
- HTTPS的全称是Secure Hypertext Transfer Protocol(安全超文本传输协议),是在HTTP协议基础上增加了使用SSL加密传送信息的协议,可以保障信息在传输过程中的安全,以防信息泄漏。通过配置强制所有的访问都必须通过HTTPS协议,可以保障网站信息在传输过程中的保密性和完整性。
空指针引用
漏洞定义
- 程序中引用空指针,会导致空指针异常。
修复建议
- 在不确定变量是否为null的情况下,添加判断,确保变量不是null的情况下,再使用变量。
日志伪造
漏洞定义
- 用户输入的参数未做任何验证直接写入日志文件,导致攻击者可以通过特殊字符在日志中注入新的日志条目,破坏系统日志的完整性
修复建议
- 解决方案1 – 编码
在使用输入的参数写入日志文件之前,对特殊字符进行统一编码。 - 解决方案2 – 输入验证
在使用输入的参数写入日志文件之前,对参数的值进行输入验证,保证有危险的字符不会进入日志文件。
不安全的系统输出
漏洞定义
- 使用System。out和System。err将程序的信息输出,由于这些API只是将信息输出到控制台,难以用于监控程序的运行状况。
修复建议
- 结构化日志API制定了规范的日志记录格式,如日志产生时间、日志级别、操作、操作结果、操作者等。记录完整的日志信息不仅可以用户监控程序的运行状态,还可以用户作为追踪和起诉攻击者的有利证据。
服务器端请求伪造
漏洞定义
- 很多web应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片、下载文件、读取文件内容等。这个功能如果被恶意使用,可以把存在缺陷的web应用作为代理攻击远程和本地的服务器。这种形式的攻击称为服务端请求伪造。
修复建议
- 服务器端请求伪造产生的根本原因在于直接使用了用户提供的URL而未进行任何验证,可以利用输入验证,通过只允许用户使用指定域名的URL的方式彻底避免此类问题。
不安全的调用Thread.stop()
漏洞定义
- 程序调用stop()方法终止线程,结果可能是在终止线程的过程中出现ThreadDeath异常,这可能会导致对象出现不一致状态,并且会泄露资源。由于此 API 本质上并不安全,因此很久以前就已弃用。
修复建议
- 使用boolean类型的变量控制线程是否停止,实现起来比较简单,也不会造成数据不一致的问题。