在最近的 findbugs (FB) 运行后,它抱怨:安全性 - HTTP 响应拆分漏洞以下代码触发它:
String referrer = req.getParameter("referrer");
if (referrer != null) {
launchURL += "&referrer="+(referrer);
}
resp.sendRedirect(launchURL);
基本上,“referrer”http 参数包含一个 url,当单击我们应用程序中的后退按钮时,浏览器会返回到该 URL。它作为参数附加到 url。经过一番研究,我知道我需要清理引荐来源网址。经过更多研究后,我发现esapi项目似乎提供了这种功能:
//1st canonicalize
import org.owasp.esapi.Encoder;
import org.owasp.esapi.Validator;
import org.owasp.esapi.reference.DefaultEncoder;
import org.owasp.esapi.reference.DefaultValidator;
[...]
Encoder encoder = new DefaultEncoder(new ArrayList<String>());
String cReferrer = encoder.canonicalize(referrer);
但是,我不知道如何检测不属于引荐来源网址的例如 jscript 代码或其他内容。那么我怎样才能用 esapi 实现呢?
我试过了:
Validator validator = new DefaultValidator(encoder);
validator.isValidInput("Redirect URL",referrer,"HTTPParameterValue",512,false);
但是这不起作用。我需要的是一个导致:
http://www.google.com/login?dest=http://google.com/%0D%0ALocation : javascript:%0D%0A%0D%0Aalert(document.cookie) (不行)
或者调用以下语句就足够了?
encoder.encodeForHTMLAttribute(referrer);
任何帮助表示赞赏。