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 362 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-260616 - Merge branch 'pay-260616' of https://gitea.g-hi.co
TEXT
content
## 自动代码审查报告 **分支**: pay-260616 **提交**: `07a9b1e0cf5cdf3d7b14a97ea3bed1494ac37edb` **提交人**: LITTLEMAIDI (11833999+littlemaidi@user.noreply.gitee.com) **时间**: 2026-05-27 15:12:46 --- ## 📋 审查摘要 - **变更文件数**: 3 - **严重问题**: 2 - **高危问题**: 3 - **中危问题**: 2 - **建议优化**: 3 ## 🐛 发现的问题 ### <font color="red">[语法错误] PHP 7.2+ 废弃/8.0 移除 `create_function` 导致致命错误</font> - **严重程度**: <font color="red">严重</font> - **文件**: `application/helpers/common_helper.php` - **行号**: 约 248 行 (`decodeUnicode` 函数) - **问题描述**: 使用了 `create_function` 创建匿名回调。该函数在 PHP 7.2 已被标记为废弃,在 PHP 8.0 中已被彻底移除。若服务器环境为 PHP 8+,将直接抛出 `Fatal Error: Uncaught Error: Call to undefined function create_function()`。 - **修复建议**: 替换为现代 PHP 匿名函数语法: ```php function decodeUnicode($str) { return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', function($matches) { return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE"); }, $str); } ``` ### <font color="red">[跨文件调用] 调用了未定义的函数/类</font> - **严重程度**: <font color="red">高危</font> - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: 约 203, 263, 313 行 - **问题描述**: 代码中直接调用了 `request_frequency()`, `create_tmp_wx_qrcode()`, `sendRoomStatusToApp()`。在提供的项目结构与变更文件中均未找到这些函数的定义。若未在其他 Helper 中自动加载,将触发 `Call to undefined function` 致命错误。 - **修复建议**: 1. 确认这些函数所在的 Helper 文件(如 `api_helper.php` 或 `wx_helper.php`)。 2. 在控制器顶部添加 `$this->load->helper('对应helper名');` 或在 `autoload.php` 中配置自动加载。 3. 检查是否存在拼写错误。 ### <font color="red">[跨文件调用] 父类控制器 `KtvPayController` 未定义</font> - **严重程度**: <font color="red">高危</font> - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: 约 10 行 - **问题描述**: `class ScreenApi extends KtvPayController` 继承了 `KtvPayController`,但项目结构中未提供该控制器文件。若不存在于 `application/core/` 或 `application/controllers/`,将导致类找不到错误。 - **修复建议**: 确认 `KtvPayController.php` 是否存在且路径正确。若为自定义核心控制器,请确保已正确放置在 `application/core/` 目录下。 ### [安全隐患] 硬编码敏感凭证 (OSS & RocketMQ) - **严重程度**: 高危 - **文件**: `application/helpers/common_helper.php` (约152行) & `application/libraries/Rocketmqs.php` (约11-13行) - **问题描述**: 1. `common_helper.php` 中硬编码了阿里云 OSS 的 `accessId` 和 `accessKey`。 2. `Rocketmqs.php` 中硬编码了阿里云 MQ 的 `accessKeyId` 和 `accessKeySecret`。 代码提交至版本控制系统后极易泄露,攻击者可直接利用凭证操作云资源或窃取数据。 - **修复建议**: 将敏感凭证移至 `application/config/config.php` 或 `.env` 环境变量文件中,通过 `$this->config->item('oss_access_key')` 或 `getenv()` 读取。严禁在代码中明文存储密钥。 ### [安全隐患] 宽泛的 CORS 跨域策略 - **严重程度**: 高危 - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: 约 6 行 - **问题描述**: `header("Access-Control-Allow-Origin:*");` 允许任意域名发起跨域请求,极易被恶意网站利用发起 CSRF 攻击或窃取接口数据。 - **修复建议**: 限制为可信域名白名单,例如: ```php $allowed_origins = ['https://yourdomain.com', 'https://app.yourdomain.com']; if (in_array($_SERVER['HTTP_ORIGIN'] ?? '', $allowed_origins)) { header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']); } ``` ### [逻辑 BUG] `switch` 条件类型不一致引发隐式转换风险 - **严重程度**: 中危 - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: 约 45-350 行 - **问题描述**: `switch ($request['function'])` 中混用了整型 (`case 1001:`) 和字符串 (`case "1006":`)。PHP 弱类型比较虽能运行,但在严格模式或未来版本中可能引发不可预期的匹配失败或类型转换 Bug。 - **修复建议**: 统一类型后再进行匹配,例如:`switch ((string)$request['function'])` 并将所有 `case` 改为字符串格式。 ### [代码质量] 滥用 `goto` 语句与潜在作用域污染 - **严重程度**: 中危 - **文件**: `application/controllers/api/ScreenApi.php` - **行号**: 约 180, 330 行 - **问题描述**: 使用 `goto famail_close;` 进行流程跳转。标签名 `famail_close` 疑似拼写错误(应为 `family_close` 或 `fail_close`)。`goto` 会破坏代码执行流,增加维护难度,且容易导致变量未初始化或作用域混乱。 - **修复建议**: 提取公共逻辑为独立方法,或使用 `if/else` 条件分支重构。避免在生产代码中使用 `goto`。 ## ✅ 代码亮点 1. **请求日志记录完善**: 在构造函数中通过 `do_log` 记录了唯一标识、控制器、方法及原始请求流,便于线上问题排查与审计。 2. **防重放/限流意识**: 在 `case 1006` 中使用了 `request_frequency()` 进行频率限制,体现了对接口防刷的安全意识。 3. **模块化模型加载**: 按需使用 `$this->load->model()` 加载业务模型,避免了不必要的内存开销,符合 CodeIgniter 最佳实践。 ## 📝 总体建议 1. **环境兼容性升级**: 立即修复 `create_function` 问题,确保代码兼容 PHP 7.4/8.0+。建议统一项目 PHP 版本并在 CI/CD 中增加语法检查。 2. **配置与代码分离**: 严格遵循 `12-Factor` 原则,将所有数据库配置、第三方服务密钥、API 域名等抽离至配置文件或环境变量,杜绝硬编码。 3. **规范跨域与路由**: API 接口应统一通过网关或中间件处理 CORS、鉴权与限流,避免在每个控制器中重复编写 Header 设置。 4. **重构复杂业务逻辑**: `case 2001` (关房操作) 逻辑过于庞大(超 150 行),包含大量数据库更新、消息推送、Redis 操作。建议按职责拆分为 `CloseRoomService` 类,提高可测试性与可维护性。 5. **统一查询构造器**: `common_helper.php` 中的 `get_printer` 函数直接拼接 SQL 字符串,建议全面替换为 CodeIgniter 的 Query Builder (`$this->db->where()->get()`),以自动处理转义并防止潜在 SQL 注入。 --- *此 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