以下是我在项目中所做的有关 hybris 安全性的列表:
初读文档
以下链接包含有关 hybris 安全性的资源和详细信息。
XML 解析器
我们经常需要从xml导入数据。
所有 Sax 解析器都应使用以下功能:
它允许
- 指示实现安全地处理 XML。这可能会对 XML 构造设置限制,以避免出现诸如拒绝
服务攻击。
- 不包括外部一般实体。
- 不包括外部参数实体或外部 DTD 子集
- 如果传入文档包含 DOCTYPE 声明,则引发致命错误
JSON
必须使用 OWASP lib json-sanitizer 验证所有输入。见https://www.owasp.org/index.php/OWASP_JSON_Sanitizer
例子:
String wellFormedJson = JsonSanitizer.sanitize(jsonData);
try
{
return new ObjectMapper().readValue(wellFormedJson, JsonNode.class).toString();
}
catch (final IOException ex)
{
LOG.error("Incorrect json data : " + wellFormedJson, ex);
}
日志
不得直接记录来自应用程序外部的字符串,以防止日志注入。
控制器案例
在 web 上下文中,所有控制器都必须扩展 BaseController。此类包含方法 logParam,应该用于记录未知内容。
此方法使用YSanitizer.sanitize(input)。
public class YSanitizer
{
public static String sanitize(final String input) {
String output = StringUtils.defaultString(input).trim();
output = output.replaceAll("(\\r\\n|\\r|\\n)+", " ");
output = StringEscapeUtils.escapeHtml(output);
return output;
}
}
其他情况
拨打StringEscapeUtils.escapeJava(valToLog) 就足够了。
保护敏感数据免受堆检查
由于可以检查堆,因此不应将敏感数据存储在 String 对象中。
确实,字符串是不可变的,可以在堆中停留一段时间。
为防止出现此问题,所有敏感字符串都必须存储在 char[] 中。
这个数组应该尽快填充“0”(当不需要该值时)。
并不是说这种方法不是 100% 安全,而是减少了在堆中查找密码的时间窗口。
跨站脚本 (XSS)
确保de.hybris.platform.servicelayer.web.XSSFilter 在传入请求的过滤器列表中
- 验证所有用户的默认密码是否已更改
- 更改生产环境的管理员用户密码
- 禁用自动登录或预填充密码
- 密码编码应该是MD5或更好的SHA256
- 更改默认密码编码器
- 为 MD5 和 SHA256 密码编码器更改 SALT
- 验证数据库密码以及将其以纯文本形式存储在 local.properties 中的要求。
- 确认用户帐户和结帐页面只能通过安全的 SSL 连接访问
- 检查 Web 应用程序防火墙是否到位
- 执行代码审查以确保没有敏感数据(如信用卡信息或密码)记录到日志文件中
- 验证 hybris 应用程序服务器未以 root 身份运行
- 保护已连接的 JMX