6

当我使用 fortify 进行扫描时,我在下面的代码中遇到了诸如“经常被滥用:身份验证”之类的漏洞。为此,我们是否有任何解决方法来避免此问题。我看过相关的帖子,但无法获得解决方案。使用 ESAPI 我为主机名和 ipadress 提供了正则表达式,但它不起作用。 addr.getHostAddress() java.net.InetAddress.getByName(nameServiceHost); java.net.InetAddress.getLocalHost().getCanonicalHostName() localhost.getHostName()

请建议我解决这个问题。

4

4 回答 4

2

所有其他答案都试图通过不使用内置 API 而是使用命令行或其他方式来提供解决方法。但是,他们忽略了实际问题,这里的问题不是 API,而是假设 DNS 可以用于身份验证。

攻击者可以欺骗(即伪造)假装是有效调用者的 DNS 响应。他们还可以使用IP 地址欺骗来伪装成有效的呼叫者,而不会攻击 DNS。

TL;DR 不要使用 DNS 或呼叫者 IP 作为身份验证源。而是使用 SSL/TLS 进行加密连接,然后您可以使用Basic-AuthenticationOauth2甚至更好的客户端证书(即 mTLS)

于 2020-03-22T22:23:54.723 回答
0

您可以验证请求是否来自受信任的主机

String ip = request.getRemoteAddr(); 
InetAddress addr = InetAddress.getByName(ip); 
if (addr.getCanonicalHostName().endsWith("trustme.com")) { 
 trusted = true; 
} 
于 2016-10-31T06:50:26.990 回答
0

为 Elasticsearch 传输客户端尝试 InetSocketAddress 包装器,尤其是:

new InetSocketAddress(hostname, port)
于 2018-05-18T21:56:55.620 回答
-1

对于我的情况,我已经重新编写了这样的代码

    public static String getIPAddress(String hostname) {
    Process process;
    String ipAddress = null;
    String localIpAddress = null;
    String[] commandArray;

    if(System.getProperty("os.name").startsWith("Windows")) {
        commandArray = new String[] {"cmd", "/c", "ping "+hostname+ " -4 | findstr Pinging"}; // For Windows
    } else {
        commandArray = new String[] { "bash", "-c", "host "+hostname}; // For Linux and OSX
    }

    try {
        process = Runtime.getRuntime().exec(commandArray);
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String[] output;
         // Reading the output of a command executed.
         while ((localIpAddress = stdInput.readLine()) != null) {
             if(System.getProperty("os.name").startsWith("Windows")) {
                 output = localIpAddress.split(" ");
                 ipAddress = output[2].replace("[", "").replace("]", "").trim();
             } else {                
                 output = localIpAddress.split("has address"); 
                 ipAddress = output[1];
             }
         }
    } catch (IOException e) {
        org.owasp.esapi.reference.Log4JLogFactory.getInstance().getLogger(" com.util.esapi.InetAddressWrapper.getIPAddress() << "+e+" >>");
    }
    return ipAddress;
}   
于 2017-02-14T06:45:18.670 回答