SV.SOCKETS

如果应用程序正在使用套接字,将报告此警告。

漏洞与风险

在许多情况下都应避免使用套接字。例如,EJB 标准包含以下指导原则:企业 bean 不能尝试侦听套接字,接受套接字的连接,或使用套接字进行多播。如果使用套接字,其他应用程序(applet、servlet 等)可能出现严重安全问题。

Klocwork 安全漏洞 (SV) 检查器可识别可能创建危险数据的调用;这些调用被视为不安全的来源。用户所提供的任何数据都可能是不安全的来源,因为用户可能是攻击者,或者可能引入人为错误。

缓解与预防

使用框架方法调用代替直接使用套接字。

示例 1

复制
 public class SV_SOCKETS_Sample_1 extends Applet {
     static final int PORT = 7776;
     public void init() {
         super.init();
         try {
             final ServerSocket serv = new ServerSocket(PORT);
             Runnable rr = new Runnable() {
                 public void run() {
                     try {
                         while (true) {
                             Socket sock = serv.accept();
                             BufferedReader r = new BufferedReader(
                                     new InputStreamReader(sock
                                             .getInputStream()));
                             PrintWriter w = new PrintWriter(sock
                                     .getOutputStream(), false); // no autoFlush
                             w.write("Hello");
                             w.flush();
                             r.close();
                             w.close();
                             sock.close();
                         }
                     } catch (IOException e) {
                         e.printStackTrace();
                     }
                 }
             };
             new Thread(rr).start();
         } catch (IOException e1) {
             e1.printStackTrace();
         }
     }
     //...
     public void paint(Graphics g) {
     }
 }

针对第 22 行报告 SV.SOCKETS:在许多情况下都应避免直接使用套接字(例如在 Applet、EJB 中)。这可能导致严重问题