我是 Stack Overflow 论坛的新手。我对修复强化扫描问题有疑问。
HP Fortify 扫描报告以下代码的资源注入(inject)问题。
String testUrl = "http://google.com";
URL url = null;
try {
url = new URL(testUrl);
} catch (MalformedURLException mue) {
log.error("MalformedUrlException URL " + testUrl + " Exception : " + mue);
}
在上面的代码中,强化显示资源注入(inject)行 => url = new 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
最佳答案
我认为这里真正的问题不是 URL 可能存在某种格式错误,而是 URL 可能未引用有效的站点。更具体地说,如果我(坏人)能够使您的 URL 指向我的网站,那么您可以从我的位置获取未经测试的数据,并且我可以返回可能用于危害您的系统的数据。我可能会用它来表示返回“坏人鲍勃”的记录,使鲍勃看起来像个好人。
我怀疑在您的代码中您没有在字符串中设置硬编码值,因为这通常用诸如
之类的词来描述When an application permits a user input to define a resource, like a file name or port number, this data can be manipulated to execute or access different resources.
(参见 https://www.owasp.org/index.php/Resource_Injection )
我认为正确的回应应该是以下内容的组合:
不要从用户那里获取结果,而是使用输入从您自己的内部列表中进行选择。
认为该值来自可信来源。例如,从严格控制的数据库或配置文件中读取。
您不需要删除警告,您需要证明您了解风险并说明为什么可以在您的案例中使用该值。
关于java - 如何使用 ESAPI 修复资源注入(inject) (URL) 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19399518/