我正面临一个由于
而无法修复的问题标题处理:SMTP
我尝试了多种解决方案。但是,设防仍然失败。
我的代码如下:
@Override
public Map<String, String> sendEmail(EmailBody parameters, String form) {
Map<String, String> result = new HashMap<>();
String emailSubjectValue = parameters.getEmailSubject();
// Check email subject for Manipulation
if (isHeaderInjection(emailSubjectValue)) {
result.put("error", "invalid email Subject");
return result;
}
try{
....
message.setSubject(emailSubjectValue, "UTF-8");
}...
private static boolean isHeaderInjection(String value) {
if (value == null)
return false;
else if ((value.indexOf('\n') != -1 || value.indexOf('\r') != -1) || value.indexOf("%0A") != -1) {
return true;
}
return false;
}
}
即使在设置emailSubject之前进行检查,扫描仍会失败。
请问有什么解决办法吗?
谢谢
答案 0 :(得分:0)
据我所知,您必须避免在邮件主题中出现任何CRLF
由于当应用程序的输出中包含恶意数据时会发生SMTP头操纵漏洞,因此一种逻辑方法是立即在头上下文中使用数据之前验证数据,并确保没有任何非法的CRLF字符可以破坏头结构
在设置主题之前,您可以使用以下方法确保不会发生这种情况:
String normalizedSubject = StringUtils.normalizeSpace(emailSubjectValue);