security: harden admin password change and production session headers

This commit is contained in:
2026-02-07 21:37:55 +08:00
parent 7997a97a9a
commit 08864e51ba
26 changed files with 159 additions and 59 deletions

View File

@@ -14,15 +14,35 @@ from routes.decorators import admin_required
@admin_api_bp.route("/admin/password", methods=["PUT"])
@admin_required
def update_admin_password():
"""修改管理员密码"""
"""修改管理员密码(要求提供当前密码并校验新密码强度)"""
data = request.json or {}
current_password = (data.get("current_password") or "").strip()
new_password = (data.get("new_password") or "").strip()
if not current_password:
return jsonify({"error": "当前密码不能为空"}), 400
if not new_password:
return jsonify({"error": "密码不能为空"}), 400
return jsonify({"error": "密码不能为空"}), 400
if current_password == new_password:
return jsonify({"error": "新密码不能与当前密码相同"}), 400
is_valid, error_msg = validate_password(new_password)
if not is_valid:
return jsonify({"error": error_msg}), 400
username = session.get("admin_username")
if not username:
return jsonify({"error": "未登录"}), 401
admin = database.verify_admin(username, current_password)
if not admin:
return jsonify({"error": "当前密码错误"}), 401
if database.update_admin_password(username, new_password):
session["admin_reauth_until"] = 0
session.modified = True
return jsonify({"success": True})
return jsonify({"error": "修改失败"}), 400