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
Update row 301 in issue
id
Primary key.
INTEGER NOT NULL
repo_id
INTEGER
index
INTEGER
poster_id
INTEGER
original_author
TEXT
original_author_id
INTEGER
name
🔍 代码审查报告:pay-260519 - 其他 同步
TEXT
content
## 自动代码审查报告 **分支**: pay-260519 **提交**: `9a52d4708d6eecaeb3fe9e17e28dd333b00cbd3c` **提交人**: chenjunfeng (developer.jeff.c@gmail.com) **时间**: 2026-05-25 13:46:46 --- ## 1. 审查摘要 - **代码质量评分**:5.5 / 10 分 - **总体评价**:该 Helper 文件承担了过多核心业务逻辑(短信、微信 API、WebSocket、打印机路由、日志、加密等),属于典型的“上帝文件”。代码中存在多处硬编码敏感信息、SQL 注入风险、废弃函数调用及性能瓶颈。整体可维护性较差,需进行模块化拆分与安全加固。 - **风险等级**:🔴 高 > 📌 **框架说明**:根据 `defined('BASEPATH')`、`get_instance()`、`system/` 目录结构及加载方式,该代码高度符合 **CodeIgniter 3.x** 规范。若 `phpci` 为内部定制框架,请结合其官方文档调整部分组件调用方式。 --- ## 2. 问题详情 | 严重程度 | 文件/行号 | 问题描述 | 建议修改方案 | 代码示例 (可选) | | :--- | :--- | :--- | :--- | :--- | | 🔴 严重 | `alioss_addObject` | **硬编码云厂商密钥**:`accessId` 与 `accessKey` 直接写死在代码中,极易泄露导致资源被盗刷。 | 移至配置文件或 `.env` 环境变量中,通过 `$CI->config->item()` 或 `getenv()` 读取。 | `$param = ['accessId' => getenv('OSS_ACCESS_ID') ?: $CI->config->item('oss_access_id'), ...];` | | 🔴 严重 | `get_printer` | **SQL 注入漏洞**:`$where` 字符串直接拼接 `$shop_id`、`$checkstand_id`、`$bill_type` 等外部可控变量,未做任何转义或参数化。 | 全面改用 CI 查询构建器(Query Builder),或使用 `$this->db->escape()` 进行安全转义。 | `$this->db->where('_shop_id', $shop_id);`<br>`$this->db->where("FIND_IN_SET(".$this->db->escape($checkstand_id).", _checkstand_id) IS NOT NULL");` | | 🔴 严重 | `curlRequest` | **禁用 SSL 证书验证**:`CURLOPT_SSL_VERIFYPEER` 与 `CURLOPT_SSL_VERIFYHOST` 设为 `false`,易受中间人攻击(MITM)。 | 移除禁用配置,设为 `true` 并指定 CA 证书路径,或使用系统默认证书。 | `curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);`<br>`curl_setopt($curl, CURLOPT_CAINFO, '/path/to/cacert.pem');` | | 🔴 严重 | `decodeUnicode` | **使用已废弃函数**:`create_function` 在 PHP 7.2 已废弃,PHP 8.0 已彻底移除,将导致致命错误。 | 替换为 PHP 匿名函数(Closure)。 | `return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', function($m) { return mb_convert_encoding(pack("H*", $m[1]), "UTF-8", "UCS-2BE"); }, $str);` | | 🟠 警告 | `do_log` | **目录权限过大**:`mkdir($dirname, 0777)` 赋予所有用户读写执行权限,存在越权访问与恶意文件上传风险。 | 权限降级为 `0755` 或 `0750`,并添加 `true` 递归创建参数。 | `@mkdir($dirname, 0755, true);` | | 🟠 警告 | `unique_rand_OutTradeNo` | **低效去重逻辑**:使用 `while` 循环 + `array_flip` 去重,时间复杂度趋近 O(N²),高并发下易引发死循环或 CPU 飙升。 | 依赖数据库唯一索引约束,或改用雪花算法/UUID/Redis `INCR` 生成唯一流水号。 | 建议废弃此函数,改用业务层唯一约束或 `uniqid()` + 业务前缀。 | | 🟠 警告 | `generate_code` | **验证码丢失前导零**:返回类型为 `int`,当随机数为 `0123` 时会变成 `123`,导致短信验证失败。 | 改为返回 `string`,使用 `str_pad` 补齐位数。 | `return str_pad(mt_rand(0, pow(10, $length) - 1), $length, '0', STR_PAD_LEFT);` | | 🟠 警告 | `showErrorView` | **重定向参数未编码**:`$title`、`$error_msg` 直接拼入 URL,特殊字符会导致 URL 截断或 Header 注入。 | 使用 `rawurlencode()` 对查询参数进行编码。 | `'&title=' . rawurlencode($title) . '&error_msg=' . rawurlencode($error_msg)` | | 🟠 警告 | `web_socket_client` | **静态缓存忽略参数**:`static $WebSocketClient` 首次实例化后,后续调用传入的 `$host`、`$port` 将被完全忽略。 | 移除 `static` 缓存,或改为基于参数哈希的实例池(如 `static $pool = []; $key = md5($host.$port);`)。 | 见建议说明,避免单例滥用导致连接错乱。 | | 🟡 建议 | 全局 | **Helper 职责过重**:单文件超 800 行,混合了网络请求、DB 查询、加解密、业务路由,违反单一职责原则(SRP)。 | 按领域拆分为 `sms_helper.php`、`wechat_helper.php`、`websocket_helper.php`、`printer_helper.php`。 | 符合 CI 规范,提升可测试性与团队协作效率。 | | 🟡 建议 | `import` | **自定义加载器冲突**:`import()` 函数与 CI 自动加载机制重叠,且未处理文件依赖与路径解析。 | 优先使用 Composer 自动加载,或统一使用 `require_once`。 | 移除 `import`,改用 `require_once APPPATH . 'third_party/xxx.php';` | | 🟡 建议 | 全局 | **缺乏类型声明与规范**:未使用 PHP 7+ 类型提示,命名风格混乱(如 `characet`、`showErrorVies` 注释拼写错误)。 | 补充参数/返回值类型声明,统一驼峰/下划线命名,遵循 PSR-12。 | `function generate_code(int $length = 4): string { ... }` | --- ## 3. 总结与行动建议 ### 🔑 优先修复的关键问题 1. **立即移除硬编码密钥**:将 OSS、微信 AppSecret、Redis 密码等敏感配置迁移至 `config/` 或环境变量,严禁提交至版本库。 2. **修复 SQL 注入漏洞**:`get_printer` 中的 `$where` 拼接必须替换为 CI Query Builder 或严格转义。建议开启 CI 的 `db_debug` 并在测试环境进行 SQL 注入扫描。 3. **升级废弃语法**:全局替换 `create_function`,确保代码兼容 PHP 7.4+ / PHP 8.x。 4. **修复验证码逻辑**:`generate_code` 必须返回字符串并保留前导零,否则线上短信验证将出现大量客诉。 ### 🛠 后续重构与优化方向 1. **架构拆分**:将 `common_helper.php` 拆分为独立模块。Helper 仅应保留纯函数工具(如字符串处理、时间转换),**数据库查询、HTTP 请求、第三方 SDK 调用应下沉至 `Libraries` 或 `Services` 层**。 2. **引入依赖注入/服务容器**:当前大量使用 `&get_instance()` 和 `$CI->load->model()`,在高频调用下会产生性能损耗。建议将常用模型/服务预加载,或改用 CI4 风格的服务定位器。 3. **日志系统升级**:`do_log` 使用 `file_put_contents` 在高并发下易出现竞态条件。建议替换为 `Monolog` 或 CI 内置的 `log_message()`,并支持按级别(ERROR/INFO/DEBUG)分级输出。 4. **补充单元测试**:针对 `timeToHour`、`hourToTime`、`returnWeek`、`createOutTradeNo` 等核心转换函数编写 PHPUnit 测试用例,覆盖边界值(如跨天、闰年、空数组、非法字符)。 > ⚠️ **局限性说明**:提供的代码在 `order_printer` 函数处被截断,未能完整审查该函数的业务逻辑与异常处理。建议补充完整代码后再次进行深度审查。 --- *此 Issue 由代码审查服务自动创建*
TEXT
milestone_id
INTEGER
priority
INTEGER
is_closed
INTEGER
is_pull
INTEGER
num_comments
INTEGER
ref
TEXT
deadline_unix
INTEGER
created_unix
INTEGER
updated_unix
INTEGER
closed_unix
INTEGER
is_locked
INTEGER NOT NULL (default 0
content_version
INTEGER NOT NULL (default 0
time_estimate
INTEGER NOT NULL (default 0
Update
Cancel