v1.0.51: 批次1架构筑基 - 1)版本迁移(common/migrate.php+schema_versions+natsort迁移文件);2)登录安全(bcrypt平滑迁移login/user_add/user_update旧sha1命中自动重写+system_login_attempts限流+session加固httponly/samesite/secure);3)CSRF Token(服务端checkCsrf+auth/csrf.php登录页取token+前端common.js/login.js统一携带X-CSRF-Token);4)统一基座common/Api.php并存量强制迁移全部70个endpoint(Api::boot按public/super/module/permissions分流,写接口强制checkAjax+checkCsrf,全局异常处理);5)前端收敛(common.js新增esc转义别名);6)REV-4硬数据来源渠道可编辑(hard_update+补全弹窗下拉);7)prepared卫生(soft_update.php修复+analysis.php表名白名单REV-9)

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
qianqiuwanzi
2026-09-17 14:48:17 +08:00
parent 69fd4246c2
commit c86f08c325
91 changed files with 1072 additions and 463 deletions
+7 -1
View File
@@ -28,7 +28,7 @@ function httpPost(url, data, isFormData) {
url: BASE_URL + url,
method: 'POST',
dataType: 'json',
headers: { 'X-Requested-With': 'XMLHttpRequest' }
headers: { 'X-Requested-With': 'XMLHttpRequest', 'X-CSRF-Token': window.CSRF_TOKEN || '' }
};
if (isFormData) {
opts.data = data;
@@ -128,6 +128,11 @@ function escHtml(str) {
.replace(/"/g, '&quot;').replace(/'/g, '&#39;');
}
/** esc 别名:与后端 esc() 同名,前端渲染动态内容统一转义 */
function esc(str) {
return escHtml(str);
}
/** 手机号清洗:清除所有空白(含数字中间的空格),如 "138 1234 5678" -> "13812345678" */
function cleanPhone(v) {
return String(v == null ? '' : v).replace(/\s+/g, '');
@@ -169,6 +174,7 @@ function checkPagePermission(key) {
function initPage(activeKey, cb) {
httpGet('auth/session.php').then(function (user) {
window.CURRENT_USER = user;
window.CSRF_TOKEN = user.csrf_token || ''; // 写接口统一携带 X-CSRF-Token
try {
renderMenu(activeKey, user.permissions || []);