标头处理:SMTP

时间:2018-07-23 17:53:20

标签: java smtp fortify

我正面临一个由于

而无法修复的问题
  

标题处理: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之前进行检查,扫描仍会失败。

请问有什么解决办法吗?

谢谢

1 个答案:

答案 0 :(得分:0)

据我所知,您必须避免在邮件主题中出现任何CRLF

由于当应用程序的输出中包含恶意数据时会发生SMTP头操纵漏洞,因此一种逻辑方法是立即在头上下文中使用数据之前验证数据,并确保没有任何非法的CRLF字符可以破坏头结构

在设置主题之前,您可以使用以下方法确保不会发生这种情况:

String normalizedSubject = StringUtils.normalizeSpace(emailSubjectValue);