我是Stack Overflow论坛的新手。我有一个问题需要修复强化扫描问题。
HP Fortify扫描报告资源注入问题以获取以下代码。
String testUrl = "http://google.com";
URL url = null;
try {
url = new URL(testUrl);
} catch (MalformedURLException mue) {
log.error("MalformedUrlException URL " + testUrl + " Exception : " + mue);
}
在上面的代码中强化了在行中显示资源注入=> url =新网址(testUrl);
我已使用ESAPI对URL验证进行了以下代码更改,以修复此问题,
String testUrl = "http://google.com";
URL url = null;
try {
String canonURL = ESAPI.encoder().canonicalize(strurl, false, false);
if(ESAPI.validator().isValidInput("URLContext", canonURL, "URL", canonURL.length(), false)) {
url = new URL(canonURL);
} else {
log.error("In Valid script URL passed"+ canonURL);
}
} catch (MalformedURLException mue) {
log.error("MalformedUrlException URL " + canonURL + " Exception : " + mue);
}
然而,Fortify扫描报告仍然是错误的。它不能解决这个问题。有什么事吗?
任何解决方案都会有所帮助。
谢谢,
Marimuthu.M
答案 0 :(得分:2)
我认为这里真正的问题不是URL可能以某种方式格式错误,而是URL可能不会引用有效的网站。更具体地说,如果我,坏人,能够使您的URL指向我的网站,那么您从我的位置获取未经测试的数据,我可以返回可能用于危害您的系统的数据。我可能会用它来说回报一个“鲍勃坏人”的记录,让鲍勃看起来像个好人。
我怀疑在您的代码中,您没有在字符串中设置硬编码值,因为这通常用诸如
之类的单词来描述当应用程序允许用户输入来定义资源时,例如 文件名或端口号,可以操纵这些数据来执行或 访问不同的资源。
(见https://www.owasp.org/index.php/Resource_Injection)
我认为正确的反应将是以下的一些组合:
不要从用户那里获得结果,但是,请使用输入从您自己的内部列表中进行选择。
认为价值来自可靠来源。例如,从严格控制的数据库或配置文件中读取。
您不需要删除警告,您需要证明您了解风险并指出在您的案例中使用该值的原因。
答案 1 :(得分:0)
boolean isValidInput(java.lang.String context,
java.lang.String input,
java.lang.String type,
int maxLength,
boolean allowNull)
throws IntrusionException
isValidInput函数中的类型字段定义了与testUrl匹配的正则表达式或模式。
像:
try {
ESAPI.validator().getValidInput("URI_VALIDATION", requestUri, "URL", 80, false);
} catch (ValidationException e) {
System.out.println("Validation exception");
e.printStackTrace();
} catch (IntrusionException e) {
System.out.println("Inrusion exception");
e.printStackTrace();
}
如果requestUri与 validator.URL 下 validation.properties 中定义的模式匹配且其长度小于80,则会通过。
Validator.URL = ^(HT | F)TP(S')\:\ / \ / 0-9A-ZA-Z (:( 0-9))的( ?\ /)([?A-ZA-Z0-9 \ - \ \ \,\:\'\ / \\\ + =安培;%\ $#_] )$
答案 2 :(得分:0)
这是安德鲁的回答,但问题是Fortify警告你用户是否控制了URL。如果您的应用程序稍后决定与该网站建立连接,并且该网站不受信任,则这是一个问题。
如果这是一个您更关心共享公共URI的应用程序,那么您必须接受风险,并确保用户接受有关固有风险的适当培训,并确保重新显示这些风险网址,有人没有尝试嵌入恶意数据。