sqlite-web 0.7.2
gitea.db
issue
Create
Query
access
access_token
action
action_artifact
action_run
action_run_index
action_run_job
action_runner
action_runner_token
action_schedule
action_schedule_spec
action_task
action_task_output
action_task_step
action_tasks_version
action_variable
app_state
attachment
auth_token
badge
branch
collaboration
comment
commit_status
commit_status_index
commit_status_summary
commit_sync_log
commit_sync_status
dbfs_data
dbfs_meta
deploy_key
email_address
email_hash
external_login_user
follow
gpg_key
gpg_key_import
hook_task
issue
issue_assignees
issue_content_history
issue_dependency
issue_index
issue_label
issue_pin
issue_user
issue_watch
label
language_stat
lfs_lock
lfs_meta_object
login_source
milestone
mirror
notice
notification
oauth2_application
oauth2_authorization_code
oauth2_grant
org_user
package
package_blob
package_blob_upload
package_cleanup_rule
package_file
package_property
package_version
project
project_board
project_issue
protected_branch
protected_tag
public_key
pull_auto_merge
pull_request
push_mirror
reaction
release
renamed_branch
repo_archiver
repo_hidden_file
repo_indexer_status
repo_license
repo_redirect
repo_topic
repo_transfer
repo_unit
repository
review
review_state
secret
session
sqlite_sequence
star
stopwatch
system_setting
task
team
team_invite
team_repo
team_unit
team_user
topic
tracked_time
two_factor
upload
user
user_badge
user_blocking
user_open_id
user_redirect
user_setting
version
watch
webauthn_credential
webhook
Toggle helper tables
Structure
Content
Query
Insert
Drop
Import
Export
Delete row 392 from issue
id
392
repo_id
22
index
40
poster_id
1
original_author
original_author_id
0
name
🔍 代码审查报告:app-260519 - Merge branch 'app-260519
🔍 代码审查报告:app-260519 - Merge branch 'app-260519' of https://gitea.g-hi.co
...
content
## 自动代码审查报告 **分支**: app-260519 **提交**: `e2df10dd7
## 自动代码审查报告 **分支**: app-260519 **提交**: `e2df10dd72c66637a0205bbb92aebc80b636c215` **提交人**: zhangjunnan (121158035@qq.com) **时间**: 2026-05-28 10:55:21 --- ## 1. 审查摘要 - **代码质量评分**:4.5 / 10 分 - **总体评价**:代码库呈现典型的早期 CodeIgniter 3 架构特征(注:实际代码结构为 CI3,非 `phpci` 官方框架)。整体业务逻辑覆盖较广,但存在大量历史遗留问题。核心隐患集中在 **SQL 注入风险、硬编码敏感凭证、非原子锁操作、废弃语法兼容性及连接资源滥用**。代码规范性较弱,缺乏类型约束与统一设计模式,在高并发或现代 PHP 版本(≥7.4/8.0)下极易引发崩溃或安全事件。 - **风险等级**:🔴 高 ## 2. 问题详情 | 严重程度 | 文件/行号 | 问题描述 | 建议修改方案 | 代码示例 (可选) | | :--- | :--- | :--- | :--- | :--- | | 🔴 严重 | `common_helper.php`<br>`alioss_deleteObject` / `alioss_addObject` | **硬编码云存储密钥**:OSS `AccessKey` 与 `SecretKey` 直接写死在代码中,极易通过版本库泄露,导致云存储数据被恶意读取、篡改或删除。 | 将密钥迁移至 `application/config/oss.php` 或环境变量,通过 CI 配置加载。禁止在代码中明文存储凭证。 | `$param = $CI->config->item('aliyun_oss');` | | 🔴 严重 | `Ahead_yc_order_model.php`<br>所有报表查询方法 | **SQL 注入漏洞**:大量使用 `$addsql` 字符串直接拼接 SQL(如 `where a." . $addsql . " and...`),未使用预处理或查询构造器。若 `$addsql` 源自前端或外部接口,将导致严重注入。 | 全面废弃字符串拼接。改用 CI Query Builder (`$this->db->where()`, `$this->db->get()`) 或严格参数绑定。 | `$this->db->where($where_array)->get('ahead_yc_order');` | | 🔴 严重 | `common_helper.php`<br>`passport_encrypt` / `passport_decrypt` | **弱加密算法**:使用 `srand(microtime())` 配合异或运算实现自定义加密,随机种子可预测,密码学强度为零,易被逆向破解。 | 废弃该函数。改用 PHP 原生 `openssl_encrypt()` / `openssl_decrypt()` 或 CI 内置 `Encryption` 库。 | `openssl_encrypt($str, 'AES-256-CBC', $key, 0, $iv);` | | 🔴 严重 | `common_helper.php`<br>`decodeUnicode` | **使用已废弃函数**:`create_function()` 在 PHP 7.2 标记废弃,PHP 8.0 已彻底移除,直接导致 `Fatal Error`。 | 替换为匿名函数(闭包)。 | `preg_replace_callback('/\\\\u([0-9a-f]{4})/i', fn($m) => mb_convert_encoding(pack("H*", $m[1]), "UTF-8", "UCS-2BE"), $str);` | | 🟠 警告 | `Ahead_shop_config_second_model.php`<br>`get_one()` | **并发竞态条件**:查询为空时直接 `insert` 再查询。高并发下多个请求同时判定为空,会插入重复记录,破坏数据唯一性。 | 使用数据库事务 + `SELECT ... FOR UPDATE`,或改用 `INSERT IGNORE` / `ON DUPLICATE KEY UPDATE` 保证幂等。 | `$this->db->trans_start(); ... $this->db->trans_complete();` | | 🟠 警告 | `common_helper.php`<br>`doRedisLockRelease` | **分布式锁非原子释放**:`GET` 判断后 `DEL` 删除存在时间窗口,高并发下可能误删其他进程持有的锁,引发业务错乱。 | 使用 Lua 脚本保证 `GET` 与 `DEL` 的原子性。 | `eval("if redis.call('get',KEYS[1])==ARGV[1] then return redis.call('del',KEYS[1]) else return 0 end", 1, $key, $value);` | | 🟠 警告 | `common_helper.php`<br>所有 `rs_*` 函数 | **Redis 连接频繁创建/销毁**:每个函数独立调用 `get_aliyun_redis_conn()` 并 `$obj->close()`,TCP 握手开销极大,严重拖慢响应。 | 采用单例模式或连接池缓存 Redis 实例;或启用 `pconnect` 长连接。避免每次请求重复建连。 | `static $conn; if(!$conn) $conn = get_aliyun_redis_conn(); return $conn;` | | 🟠 警告 | `common_helper.php`<br>`getTimeInfo` | **数组过滤逻辑失效**:`foreach` 中 `unset($item)` 仅销毁局部变量副本,无法从原数组中移除元素,导致过滤失败。 | 使用 `array_filter` 或正确传递键名进行 `unset`。 | `return array_values(array_filter($array, fn($i) => ($time1 >= $i['start_time'] && $time1 <= $i['end_time']) || ...));` | | 🟠 警告 | `common_helper.php`<br>`business_time` | **边界条件处理不当**:`if ($business_time > 3600 * 24)` 当时间恰好等于 24 小时时,会错误显示为 `当天 24:00`。 | 改为 `>=` 判断,或使用 `DateTime` 对象进行标准化计算。 | `if ($business_time >= 86400) { ... }` | | 🟡 建议 | `common_helper.php`<br>全局结构 | **安全校验位置错误 & 规范混乱**:`defined('BASEPATH') OR exit(...)` 放在文件中部;函数命名驼峰/下划线混用;注释大量重复。 | 将安全校验移至文件首行;统一遵循 PSR-12 命名规范;清理冗余/过期注释。 | `<?php defined('BASEPATH') OR exit('No direct script access allowed');` | | 🟡 建议 | `Ahead_shop_config_second_model.php`<br>`$shop_config` | **静态缓存内存泄漏风险**:`public static $shop_config` 在 CLI 或长驻进程(如 Swoole/Workerman)中会无限增长,最终 OOM。 | 增加 TTL 过期机制,或改用 CI Cache 驱动(Redis/Memcached)替代静态数组。 | `if (!$this->cache->get($cache_key)) { $this->cache->save($cache_key, $data, 300); }` | | 🟡 建议 | `common_helper.php`<br>`rs_set` / `rs_incrByFloat` | **逻辑与类型校验不匹配**:`rs_set` 注释为“设置值”,但代码 `!$obj->exists()` 实为 `SETNX`;`rs_incrByFloat` 使用 `is_float()` 会拦截字符串浮点数 `"0.5"`。 | 明确函数语义(改名 `rs_setnx`);类型校验改用 `is_numeric()`。 | `if (!empty($keyName) && is_numeric($float)) { ... }` | ## 3. 总结与行动建议 ### 🔑 优先修复的关键问题 1. **立即移除硬编码凭证**:将 OSS、Redis、短信平台等所有密钥/密码抽离至配置文件或 `.env`,并配置 Git 忽略规则。 2. **封堵 SQL 注入通道**:`Ahead_yc_order_model.php` 中的报表查询必须全面重构。停止使用 `$addsql` 拼接,统一迁移至 CI Query Builder 或 PDO 预处理。 3. **升级加密与废弃语法**:替换 `passport_encrypt` 为 `openssl` 方案;修复 `create_function` 以兼容 PHP 8+。 4. **修复分布式锁竞态**:使用 Lua 脚本重写 `doRedisLockRelease`,确保锁释放的原子性。 ### 🛠 后续重构与优化方向 - **架构适配说明**:当前代码基于 **CodeIgniter 3** 架构(`get_instance()`, `$this->db->query()` 等),并非官方 `phpci` 框架。若项目确为 `phpci` 定制版,请确认其是否兼容 CI3 生命周期;若为独立框架,建议逐步迁移至现代 CI4 或 Laravel,以获得原生依赖注入、PSR 规范及更强安全基座。 - **数据库层重构**:废弃原生 SQL 拼接,全面采用 Query Builder。对高频查询表(如 `ahead_yc_order`)补充复合索引,避免全表扫描与 `GROUP BY` 性能瓶颈。 - **连接资源治理**:Redis 与 MySQL 连接应实现单例/连接池管理。在 `common_helper.php` 中封装统一的 `RedisClient` 与 `DbClient` 类,避免散落的 `connect/close`。 - **类型安全与现代化**:为所有 Helper 函数添加 PHP 7+ 类型声明(`string`, `int`, `array`, `bool`)及返回值类型。启用 `declare(strict_types=1);` 提升代码健壮性。 - **长驻进程兼容**:若系统运行于 Swoole/Workerman 等常驻内存环境,必须清理所有 `static` 缓存变量,改用外部缓存中间件,并实现请求级上下文隔离。 > 💡 **注**:由于 `common_helper.php` 末尾代码被截断(`import` 函数未闭合),本次审查基于已提供内容。建议补充完整文件后对 `import` 加载机制及全局作用域污染进行二次评估。 --- *此 Issue 由代码审查服务自动创建*
...
milestone_id
0
priority
0
is_closed
0
is_pull
0
num_comments
0
ref
deadline_unix
0
created_unix
1779936921
updated_unix
1779936921
closed_unix
0
is_locked
0
content_version
0
time_estimate
0
Delete
Cancel