Files
YwxAppThink/.env.production.example
T
yangwx 18101cf11a feat: 上线前安全加固与发布工程化;appmall 由插件迁移为独立应用
安全(P0)
- 发布包签名:新增 scripts/package_keygen.php、scripts/package_verify.php、
  ywxapp\service\PackageVerifier;FrameworkService::apply() 解压前强制验签
  (ywxapp.framework_package_verify,默认开启)
- JWT 收紧:config/jwt.php 移除公开默认密钥,JwtService::assertStrongSecret()
  校验非空 / 长度≥32 / 已知弱值;.env.production.example 键名由 JWT_SECRET_KEY 修正为 JWT_SECRET
- /api/v1/Article:免登录白名单收窄为只读接口,写操作字段白名单 + assertOwner() 越权校验
- 开发者令牌:查找接口不再回显明文、统一失败文案 + 限流
- TemplateInstaller:文件名白名单 + realpath 归一化 + 目录内断言,修复 Zip Slip;补 use ZipArchive
- 后台登录:接入验证码、失败锁定与登录限流(config/ratelimit.php)
- 缓存 / Session 驱动可由 .env 覆盖(CACHE_DRIVER / SESSION_TYPE),集群部署改 redis
- paycenter 支付日志开关改为 PAY_LOG,不再跟随 APP_DEBUG

工程化 / 交付
- 新增 CHANGELOG.md 与 .env.production.example;composer.lock 入库锁定依赖版本
- 插件离线安装 CLI 增加 --uid,后台上传安装透传 uid,付费插件授权校验可通过
- 授权拒绝文案区分「未携带 uid」与「未找到有效授权」,便于排障
- .gitignore 放行 .env.production.example / .env.addon.example / .gitattributes / public/.htaccess

结构
- appmall 由 addon/appmall 迁移为独立应用 app/appmall(市场 / 开发者中心 / 审核 / 分润)
2026-10-22 00:53:39 +08:00

70 lines
2.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
; ============================================================
; 生产环境 .env 模板(复制为 .env 并填入真实生产值)
; 重要:APP_DEBUG 必须为 false;所有密码/密钥必须使用强随机值
; ============================================================
; ---- 应用 ----
APP_DEBUG = false
APP_HOST =
; ---- 数据库(生产独立库,禁止使用 _dev 库) ----
DB_TYPE = mysql
DB_HOST =
DB_NAME =
DB_USER =
DB_PASS =
DB_PORT = 3306
DB_CHARSET = utf8mb4
DB_PREFIX = wxapp_
; ---- Redis(生产建议独立实例,启用密码) ----
REDIS_HOST =
REDIS_PORT = 6379
REDIS_PASSWORD =
REDIS_DB = 0
DEFAULT_LANG = zh-cn
; ---- 同步服务(生产地址与密钥) ----
SYNC_IS_ENABLE = true
SYNC_BASE_URL =
SYNC_KEY =
; ---- JWT 密钥(必须重新生成强随机值,勿复用 dev 密钥) ----
; 注意:键名必须是 JWT_SECRET。历史上这里误写成 JWT_SECRET_KEY,
; 导致代码读不到、退回公开默认密钥 —— 现在读不到会直接拒绝签发(fail-closed)。
; 生成:openssl rand -base64 64
JWT_SECRET =
JWT_ISSUER =
JWT_AUDIENCE =
; ---- 应用市场(按需配置) ----
APPMARKET_SSL_VERIFY = true
APPMARKET_DEV_TOKEN =
; ---- 安全默认值(生产请严格按此配置,切勿改回 true) ----
; 允许未知来源插件离线包直装
ADDON_UNKNOWN_SOURCES = false
; 后台「设计插件」开发模式
ADDON_DEVELOPER = false
; 运行时授权校验(付费插件必须有有效授权才加载)
ADDON_LICENSE_CHECK = true
; 插件包下载签名密钥(openssl rand -base64 64)
ADDON_SECRET =
; 升级包强制验签(关闭等于允许任意代码覆盖站点,仅限内网自签调试)
FRAMEWORK_PACKAGE_VERIFY = true
; 支付 mock:生产必须 false
PAY_MOCK = false
; ---- 缓存 / Session ----
; 单可用区单实例可用 file;多副本/集群部署必须改 redis,
; 否则会出现「刷新一下就掉登录」与缓存不一致。
CACHE_DRIVER = file
SESSION_TYPE = file
; ---- 市场角色 ----
; center=本机即中心站 / client=客户机 / auto=按 api_url 推断
APP_MARKET_MODE = client
; 客户机指向中心站域名;中心站留空或指向自身
APP_API_URL = https://www.ywxapp.cn