【代码扫描修复】DoS 拒绝服务漏洞

漏洞描述:

Denial of Service 攻击试图让目标用户无法访问计算机或网络资源。如果应用程序存在 Denial Of Service(DoS)漏洞,攻击者就能阻止合法用户访问由该应用程序提供的服务。通过控制网络数据包、编程漏洞、逻辑漏洞或资源处理等漏洞,可以采用多种方式组织合法用户访问服务。攻击者可能通过对应用程序发送大量请求,而使它拒绝对合法用户的服务,但是这种攻击形式经常会在网络层就被排除掉了。导致出现很多问题的原因之一是资源释放不当的 bug,这种 bug 会导致应用程序在运行时停止。

原理、风险及预防:
拒绝服务(Dos)攻击的目的是使得资源(站点、应用程序、服务器)不能实现它预定的设计目的。
如果一项服务收到了大量的请求,那么它可能会停止向合法用户提供。
同样的道理,当程序漏洞被利用时,服务可能会停止或者处理它使用的资源的方式。
Dos攻击严重地降低了合法用户的使用体验。这些攻击会导致大量响应延迟,过度损耗和服务中断,从而直接影响可用性。

示例:
修复建议:避免因流无限大,导致的死循环或内存溢出。
反例:
BufferedReader in = new BufferedReader(new FileReader(fileName));
String line = null;
while ((line = in.readLine()) != null) {

}

解决方案:

思路: 不再使用 readLine() 方法读取,替换为字节读取。

修复前:

try (InputStreamReader inputStreamReader = new InputStreamReader(conn.getInputStream());
    BufferedReader reader = new BufferedReader(inputStreamReader)) {
    
    
    String line;
    while ((line = in.readLine()) != null) {
    
    
        // 业务处理
        System.out.println(line);
    }
}

修复后:

int len;
byte[] buffer = new byte[10 * 1024];
try (InputStream is = conn.getInputStream();
    ByteArrayOutputStream os = new ByteArrayOutputStream()) {
    
    
    while ((len = is.read(buffer)) != -1) {
    
    
        os.write(buffer, 0, len);
    }
    byte[] bytes = os.toByteArray();
    if (bytes.length > 0) {
    
    
        String line = new String(bytes, StandardCharsets.UTF_8);
        // 业务处理
        System.out.println(line);
    }
}

整理完毕,完结撒花~

猜你喜欢

转载自blog.csdn.net/qq_33204709/article/details/127914970