java - 报头操作:SMTP
问题描述
我正面临一个问题,即 fortify 由于以下原因而失败
报头操作:SMTP
我尝试了多种解决方案。但是,fortify 仍然失败。
我的代码如下:
@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 之前进行了检查,扫描仍然失败。
如果有任何解决方案,请告诉我吗?
谢谢
解决方案
据我所知,您必须避免在邮件主题中使用任何 CRLF
由于当应用程序在其输出中包含恶意数据时会出现 SMTP 标头操作漏洞,因此一种合乎逻辑的方法是在将数据用于标头上下文之前立即对其进行验证,并确保没有可能破坏标头结构的非法 CRLF 字符。
在设置主题之前,您可以使用以下方法确保不会发生这种情况:
String normalizedSubject = StringUtils.normalizeSpace(emailSubjectValue);
推荐阅读
- azure-devops-rest-api - 使用 Azure Devops Git Api 在浏览器中查看 UML 文件
- loops - 循环遍历一系列列并使用子图以网格方式(列和行)绘制它们
- javascript - 如何通过单击外部输入和 div 本身来隐藏 div
- javascript - 更新 React 组件中的默认值
- bash - 当未提供 --stable 选项时, sort -n 是否可以预测地处理关系?如果有,怎么做?
- groovy - 有没有办法在 Liferay 中获取工作流提交的表单字段?
- python - 具有多个连接的 Sqlalchemy 查询,包括非直接多对多关系
- c# - Unity C# 错误'cs0116'“命名空间不能直接包含字段或方法等成员”
- javascript - 在 mouseenter 上隐藏 div - 但保留它
- entity-framework-core - ef core plus 是否支持带减号的批量更新?