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 311 from issue
id
311
repo_id
21
index
84
poster_id
1
original_author
original_author_id
0
name
🔍 代码审查报告:pay-260616 - Merge remote-tracking branch
🔍 代码审查报告:pay-260616 - Merge remote-tracking branch 'pay/pay-260616' into
...
content
## 自动代码审查报告 **分支**: pay-260616 **提交**: `bfe430b5c
## 自动代码审查报告 **分支**: pay-260616 **提交**: `bfe430b5c0ccc31a3b26a8d65ee8dd9cf077e849` **提交人**: zhangjunnan (121158035@qq.com) **时间**: 2026-05-26 09:56:40 --- ## 📋 审查摘要 - **变更文件数**: 1 - **严重问题**: 1 - **高危问题**: 4 - **中危问题**: 3 - **建议优化**: 2 ## 🐛 发现的问题 ### <font color="red">[语法错误] 代码截断导致语法解析失败</font> - **严重程度**: <font color="red">严重</font> - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: 文件末尾(约第 500+ 行) - **问题描述**: 代码在 `$this->Ahead_common_config_model->get_one(['_key'=>'show_cavca_c` 处突然中断,缺少闭合的数组括号 `]`、方法调用括号 `)`、分号 `;` 以及 `switch` 和类的闭合大括号。此代码部署后将直接触发 PHP `Parse error` 致命错误,导致整个接口不可用。 - **修复建议**: 补全缺失的语法结构。例如: ```php $common_config = $this->Ahead_common_config_model->get_one(['_key'=>'show_cavca_copyright_qrcode'], '_value'); // ... 后续逻辑 } // 结束 case } // 结束 switch } // 结束 index 方法 } // 结束 ScreenApi 类 ``` ### <font color="red">[跨文件调用] 模型加载命名大小写不一致(Linux环境致命)</font> - **严重程度**: <font color="red">高危</font> - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: 多处(如 100, 115, 130, 145 等) - **问题描述**: CodeIgniter 在 Linux 服务器上对文件名严格区分大小写。代码中混用了 `ahead_xxx_model` 和 `Ahead_xxx_model`(例如 `$this->load->model('ahead_room_package_infos_model')` 与 `$this->load->model('Ahead_wares_package_model')`)。若实际模型文件命名与加载字符串大小写不匹配,将触发 `Unable to locate the model you have specified` 致命错误。 - **修复建议**: 统一模型加载命名规范。建议全部使用小写加载(CI会自动映射),或严格匹配文件名的 PascalCase。例如统一改为: ```php $this->load->model('ahead_room_package_infos_model'); $this->load->model('ahead_wares_package_model'); ``` 并确保 `application/models/` 下的文件名与加载名完全一致。 ### <font color="red">[跨文件调用] 调用了未验证的全局函数/Helper</font> - **严重程度**: <font color="red">高危</font> - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: ~45, ~155, ~195, ~385, ~430 等 - **问题描述**: 代码中直接调用了 `do_log()`, `request_frequency()`, `create_tmp_wx_qrcode()`, `sendRoomStatusToApp()`, `get_aliyun_redis_conn()`, `doLog()` 等函数。这些非 PHP 内置或 CI 原生函数,若未在 `config/autoload.php` 中加载对应 Helper 或未在公共文件中定义,将触发 `Call to undefined function` 致命错误。 - **修复建议**: 1. 确认这些函数已正确定义并自动加载。 2. 若为自定义 Helper,请在 `config/autoload.php` 中添加:`$autoload['helper'] = array('custom_api_helper', 'redis_helper');` 3. 或在控制器顶部显式加载:`$this->load->helper('xxx');` ### <font color="red">[跨文件调用] 父类 KtvPayController 未定义风险</font> - **严重程度**: <font color="red">高危</font> - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: 14 - **问题描述**: `class ScreenApi extends KtvPayController`。若项目中不存在 `KtvPayController.php` 文件,或文件路径/命名空间配置错误,将直接导致 `Class 'KtvPayController' not found` 致命错误。 - **修复建议**: 确认 `application/core/KtvPayController.php` 或对应路径文件存在,且类名严格匹配。若为第三方包引入,请确保 `composer autoload` 或 CI 核心加载机制已正确配置。 ### [安全隐患] 原始SQL拼接存在注入风险 - **严重程度**: 高危 - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: ~285 - **问题描述**: `$openLogUpStr` 变量通过字符串拼接直接构造 SQL 更新语句:`"_unpaid_amount=_unpaid_amount+'" . $cost . "',..."`。虽然 `$cost` 当前由内部计算得出,但直接拼接原始 SQL 字符串违背了 CI 的查询构建器规范,若后续逻辑变更或 `$cost` 来源被污染,极易引发 SQL 注入。 - **修复建议**: 使用 CI 查询构建器或参数绑定: ```php $this->ahead_open_room_log_model->update([ '_unpaid_amount' => '_unpaid_amount + ' . floatval($cost), '_prime_unpaid_amount' => '_prime_unpaid_amount + ' . floatval($primCost), // ... 其他字段 ], ['_id' => $open_room_data['_id']]); ``` ### [安全隐患] CORS 配置过于宽松 - **严重程度**: 高危 - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: 7 - **问题描述**: `header("Access-Control-Allow-Origin:*");` 允许所有域名跨域请求。该接口涉及包厢控制、订单支付、经理验证等敏感业务,宽松 CORS 可能导致恶意站点伪造请求或 CSRF 攻击。 - **修复建议**: 限制为可信域名,或动态校验 Origin: ```php $allowed_origins = ['https://yourdomain.com', 'https://app.yourdomain.com']; if (isset($_SERVER['HTTP_ORIGIN']) && in_array($_SERVER['HTTP_ORIGIN'], $allowed_origins)) { header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']); } ``` ### [逻辑 BUG] 控制器方法直接返回布尔值 - **严重程度**: 中危 - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: 83 - **问题描述**: `if (!isset($request['function'])) { return true; }` 在 CI 控制器中直接 `return true;` 不会输出任何 HTTP 响应体,客户端将收到空响应或默认 HTML,导致前端 JSON 解析失败。 - **修复建议**: 应调用统一的响应方法或输出 JSON: ```php if (!isset($request['function'])) { $this->error_response('缺少 function 参数'); return; } ``` ### [逻辑 BUG] Switch Case 类型混用可能导致意外匹配 - **严重程度**: 中危 - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: 85, 150, 200 等 - **问题描述**: `switch ($request['function'])` 中混用了整型 `case 1001:` 和字符串 `case "1006":`。PHP 的 `switch` 使用松散比较,在极端情况下可能因类型转换导致意外匹配或逻辑混乱。 - **修复建议**: 统一转换为字符串进行比较: ```php $func = (string)($request['function'] ?? ''); switch ($func) { case '1001': ... case '1006': ... } ``` ### [代码质量] 滥用 goto 语句破坏控制流 - **严重程度**: 低危 - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: ~265, ~405 - **问题描述**: 使用 `goto famail_close;` 跳转逻辑。`goto` 严重降低代码可读性和可维护性,且标签名 `famail_close` 存在明显拼写错误(应为 `family_close` 或 `close_room`)。 - **修复建议**: 提取为独立方法或使用 `if/else` 逻辑块重构。例如将关房后的公共逻辑封装为 `private function processRoomClose($family_data, $open_room_data)`。 ### [代码质量] 重复校验代码过多(违反DRY原则) - **严重程度**: 低危 - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: 多个 case 开头 - **问题描述**: 几乎每个 `case` 开头都重复 `$familyServerId = $request['family_server_id']??''; if (!$familyServerId) { $this->error_response('mac地址错误'); }` 及 `_checkRoom` 校验。 - **修复建议**: 提取至 `__construct` 或前置钩子方法中统一处理,或使用 CI 的 `Hooks` / 中间件机制,大幅精简 `index()` 方法体积。 ## ✅ 代码亮点 1. **请求日志记录完善**:在构造函数中通过 `do_log` 记录了唯一标识、控制器、方法及原始请求流,便于生产环境问题排查。 2. **防重放/频率限制意识**:使用了 `request_frequency()` 函数对特定接口(如 `1006`)进行频率限制,体现了对接口安全的考量。 3. **业务逻辑分层清晰**:通过 `switch` 按功能码路由,且大量调用独立的 Model 方法处理业务,符合 MVC 架构思想。 ## 📝 总体建议 该控制器承载了大量触摸屏核心业务,逻辑复杂度高。当前代码存在**致命语法截断**和**跨文件引用大小写不一致**的高危风险,部署前必须修复。建议: 1. **立即补全代码**并修复截断处的语法错误。 2. **统一模型加载命名**,在 Linux 生产环境部署前进行全量大小写检查。 3. **重构重复逻辑**,将 `familyServerId` 校验、`_checkRoom` 校验、数据库加载等前置逻辑提取至基类或中间件,降低 `index()` 方法的圈复杂度。 4. **替换原始 SQL 拼接**,全面改用 CI Query Builder 或参数化查询,彻底消除 SQL 注入隐患。 5. **规范全局函数调用**,确保所有 Helper 函数在 `autoload.php` 中正确注册,避免运行时 `Call to undefined function` 崩溃。 --- *此 Issue 由代码审查服务自动创建*
...
milestone_id
0
priority
0
is_closed
0
is_pull
0
num_comments
0
ref
deadline_unix
0
created_unix
1779760601
updated_unix
1779760601
closed_unix
0
is_locked
0
content_version
0
time_estimate
0
Delete
Cancel