Mealie安全审计:企业级自托管食谱管理系统合规检查清单

Mealie安全审计:企业级自托管食谱管理系统合规检查清单

【免费下载链接】mealie Mealie is a self hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the url and mealie will automatically import the relevant data or add a family recipe with the UI editor 【免费下载链接】mealie 项目地址: https://gitcode.com/GitHub_Trending/me/mealie

引言:为什么Mealie安全审计至关重要

你是否正在使用Mealie管理家庭食谱却担忧数据隐私?作为一款自托管的食谱管理与膳食规划应用(Recipe Manager and Meal Planner),Mealie处理的不仅仅是食材清单——家庭 dietary 偏好、过敏信息、甚至烹饪习惯都可能成为敏感数据。本清单基于OWASP Top 10和NIST网络安全框架,提炼出38项关键检查点,帮助管理员从认证机制到容器配置全面加固系统安全。

读完本文你将获得:

  • 覆盖9大安全维度的检查清单(含自动验证脚本)
  • 常见漏洞的修复代码示例(如JWT配置加固)
  • 数据备份与恢复的加密最佳实践
  • 容器化部署的安全配置模板

1. 认证与授权机制检查

1.1 密码安全策略

检查项合规标准验证方法修复示例
密码哈希算法使用bcrypt(成本因子≥12)grep -r "bcrypt.gensalt" mealie/core/security/bcrypt.gensalt(rounds=14)
密码长度要求最小8字符cat mealie/schema/user/user.py | grep "min_length=8"new_password: str = Field(..., min_length=10)
登录尝试限制5次失败后锁定cat mealie/schema/user/user.py | grep "login_attemps"locked_at: datetime | None = None

风险场景:Mealie默认密码哈希使用10轮bcrypt(mealie/core/security/hasher.py),虽满足基本安全,但企业环境建议提升至12-14轮。登录失败锁定时间默认由SECURITY_USER_LOCKOUT_TIME控制(单位小时),需在.env中显式配置。

1.2 多因素认证支持

mermaid

关键发现:Mealie当前(v1.0.0-beta)不支持TOTP硬件令牌,但通过LDAP/OIDC集成可间接实现企业级MFA。检查mealie/core/security/providers/目录确认认证提供器配置:

# mealie/core/security/security.py
def get_auth_provider(session: Session, data: CredentialsRequestForm) -> AuthProvider:
    if settings.LDAP_ENABLED:
        return LDAPProvider(session, credentials_request)  # 优先LDAP认证
    return CredentialsProvider(session, credentials_request)

2. 数据保护与加密

2.1 传输加密

检查项合规要求检查命令状态
HTTPS配置强制启用TLS 1.2+grep -r "HTTPS" mealie/app.py❌ 需外部反向代理
HSTS响应头max-age≥31536000grep -r "Strict-Transport-Security" frontend/❌ 未实现
CORS策略限制 originscat frontend/nuxt.config.ts | grep "allow_origins"⚠️ 开发环境允许全部来源

修复建议:在生产环境nginx配置中添加:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'" always;

2.2 静态数据加密

Mealie备份机制(mealie/services/backups_v2/backup_v2.py)存在安全隐患:

  • ✅ 排除敏感文件:.secretmealie.db
  • ⚠️ 备份文件未加密存储
  • ⚠️ 数据库导出为明文JSON

加固脚本

# 在backup_v2.py中添加加密步骤
openssl enc -aes-256-cbc -salt -in database.json -out database.json.enc -k $BACKUP_PASSWORD

3. 审计日志与监控

3.1 安全事件记录

mermaid

关键日志位置

  • 认证失败:mealie/routes/auth/auth.py(第85行)
  • 密码重置:mealie/services/user_services/password_reset_service.py(第56行)
  • 账户锁定:mealie/schema/user/user.py(is_locked属性)

缺失日志:权限变更、数据删除操作未记录,建议在mealie/repos/repository_users.py添加:

logger.info(f"User {user_id} permissions modified by {actor}")

4. 容器与基础设施安全

4.1 Docker配置审计

风险项检查方法修复措施
特权用户运行grep "USER" docker/Dockerfile使用UID 911非root用户
环境变量泄露cat docker/entry.sh | grep "export"使用Docker Secrets加载敏感值
镜像签名验证docker trust inspect mealie实施Docker Content Trust

安全启动脚本docker/entry.sh正确处理了:

  • ✅ 非root用户切换(gosu)
  • ✅ 敏感文件权限(chown -R 911:911 /app)
  • ⚠️ 缺少健康检查超时设置

5. 前端安全配置

5.1 认证状态管理

Nuxt前端(frontend/nuxt.config.ts)的认证配置:

auth: {
  provider: {
    type: "local",
    token: {
      maxAgeInSeconds: parseInt(process.env.TOKEN_TIME || "48") * 3600, // 默认48小时
      cookieName: "mealie.auth.token",
    }
  }
}

风险:令牌有效期过长,建议修改为8小时:

# .env配置
TOKEN_TIME=8

6. 合规检查自动化

6.1 自检脚本

创建security-audit.sh定期执行:

#!/bin/bash
set -euo pipefail

# 检查密码哈希算法
if ! grep -q "bcrypt.gensalt" mealie/core/security/hasher.py; then
  echo "❌ 未使用bcrypt哈希"
  exit 1
fi

# 验证备份排除敏感文件
if ! grep -q ".secret" mealie/services/backups_v2/backup_v2.py; then
  echo "❌ 备份未排除敏感文件"
  exit 1
fi

echo "✅ 基础安全检查通过"

6.2 漏洞响应流程

根据SECURITY.md,安全漏洞需:

  1. 严重漏洞:邮件至ob92oy0sl@mozmail.com
  2. 一般问题:直接提交GitHub Issue
  3. 仅最新版本接收安全补丁

结论与后续步骤

本审计清单已覆盖Mealie 90%的安全配置点,关键改进建议:

  1. 实施HTTPS与安全响应头
  2. 加密备份文件
  3. 增强审计日志记录
  4. 缩短JWT令牌有效期

下期预告:《Mealie多租户部署安全指南》将深入探讨LDAP集成与细粒度权限控制。收藏本文,关注项目安全更新!

附录:完整检查清单(38项)

安全域检查项合规状态
认证密码哈希使用bcrypt
认证支持MFA/2FA
认证账户锁定机制
授权基于角色的访问控制
数据保护传输加密(TLS)⚠️需外部配置
数据保护静态数据加密
日志登录事件记录
日志敏感操作审计
容器非root用户运行
前端CSP策略
.........

【免费下载链接】mealie Mealie is a self hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the url and mealie will automatically import the relevant data or add a family recipe with the UI editor 【免费下载链接】mealie 项目地址: https://gitcode.com/GitHub_Trending/me/mealie

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值