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 530 from issue
id
530
repo_id
21
index
217
poster_id
1
original_author
original_author_id
0
name
🔍 代码审查报告:pay-260616 - 1
content
## 自动代码审查报告 **分支**: pay-260616 **提交**: `6c7ac6df0
## 自动代码审查报告 **分支**: pay-260616 **提交**: `6c7ac6df097ba02de35358eefc34fa10624b1705` **提交人**: LITTLEMAIDI (11833999+littlemaidi@user.noreply.gitee.com) **时间**: 2026-06-04 17:08:08 --- ## 1. 审查摘要 - **代码质量评分**:4/10 分 - **总体评价**:业务逻辑覆盖较全(订单创建、支付路由、会员计价、包厢状态校验等),但实现方式较为粗糙。存在**严重的安全隐患**(SQL拼接注入)、**财务计算精度风险**、**调试代码残留**及**硬编码覆盖核心状态**等问题。代码结构冗长、重复度高,未遵循现代 PHP 类型规范与 DRY 原则。`Neworderservice.php` 文件末尾被截断,影响完整评估。 - **风险等级**:🔴 高 > 📌 **框架说明**:代码中大量使用 `BASEPATH`、`get_instance()`、`$this->load->model()` 等特征,高度符合 **CodeIgniter 3** 架构规范。若 `phpci` 为贵司内部定制框架,以下审查结论与优化建议同样适用于标准 PHP 与 CI 核心设计原则。 ## 2. 问题详情 | 严重程度 | 文件/行号 | 问题描述 | 建议修改方案 | 代码示例 (可选) | | :--- | :--- | :--- | :--- | :--- | | 🔴 严重 | `Neworderservice.php` (循环体内) | 遗留调试代码 `echo $vip_upgrade_data_actual_pay;`,在生产环境会直接输出到 HTTP 响应流,破坏 JSON 结构导致前端解析崩溃。 | 立即移除所有 `echo`/`var_dump`/`print_r`,统一替换为日志记录。 | `// 删除该行,改用:log_message('debug', 'upgrade_pay: ' . $vip_upgrade_data_actual_pay);` | | 🔴 严重 | `Neworderservice.php` (约第 400+ 行) | SQL 注入风险:`"wares_package._package_id in (" . implode(",", $id_array['package_id']) . ")"` 直接拼接用户/外部传入的数组,未做类型过滤。 | 使用 `array_map('intval', $ids)` 强制转整型,或改用框架查询构造器。 | `$safe_ids = array_map('intval', $id_array['package_id']);`<br>`$pack_goods_where = "wares_package._package_id IN (" . implode(',', $safe_ids) . ")";` | | 🔴 严重 | `Order.php` / `Neworderservice.php` | 金额计算使用浮点数与 `sprintf("%.2f")`,PHP 浮点运算存在精度丢失(如 `0.1+0.2=0.30000000000000004`),易导致对账差异。 | 财务计算统一转为“分”(整数)运算,或全程使用 `bcmath` 扩展函数。 | `$actual_pay = bcadd($price, $discount, 2);`<br>`$total = bcmul($unit_price, $quantity, 2);` | | 🔴 严重 | `Order.php` `createOrder()` | 硬编码覆盖业务逻辑:`$param['type'] = 4; //edit by nan...` 注释掉原有判断后直接篡改入参,破坏订单状态机,易引发越权或计费错乱。 | 恢复条件分支或提取为独立策略类,禁止在控制器层静默修改核心业务参数。 | `if ($room_info['type'] == '3' && $room_info['close_status'] == 1) { $param['type'] = 4; }` | | 🟠 警告 | `Order.php` `buyRenewalPackage()` | 直接修改 CI 超全局对象属性:`$CI->room_id = ...`、`$CI->pay_scene = ...`,污染全局单例状态,高并发下极易引发数据串扰。 | 通过方法参数传递上下文,或使用独立的 `OrderContext` 对象封装。 | `$context = ['room_id' => $this->room_id, 'pay_scene' => 10];`<br>`$order_add_res = $this->neworderservice->createOrderWeb($param, $context);` | | 🟠 警告 | `Order.php` / `Neworderservice.php` | 频繁在业务方法内调用 `$this->load->model()`,增加文件 I/O 开销,且违反框架“按需加载或构造器预加载”的最佳实践。 | 将高频依赖模型移至控制器/库的构造函数中,或配置 `config/autoload.php`。 | `public function __construct() { parent::__construct(); $this->load->model(['ahead_yc_order_model', 'ahead_shop_model']); }` | | 🟠 警告 | `Order.php` `check_params()` | 类型比较不一致:`$from == '1'` 与 `$open_room_info['close_status'] != '-1'` 混用字符串与数字,且未做严格校验。 | 统一使用严格比较 `===`/`!==`,入口进行类型转换,避免隐式类型转换导致的逻辑漏洞。 | `if ((int)$from === 1) { ... }`<br>`if ((int)$open_room_info['close_status'] !== -1) { ... }` | | 🟡 建议 | 全局 | 缺乏类型声明、返回值约束及访问控制修饰符,违反 PSR-12 与现代 PHP 规范,降低 IDE 提示与静态分析能力。 | 逐步添加 `declare(strict_types=1);`、参数类型、`@return` 注解,并将公共属性改为 `protected`。 | `public function buyRenewalPackage(): void { ... }`<br>`protected $order_expire = 600;` | | 🟡 建议 | `Order.php` | 微信支付与国通支付路由逻辑在 `buyRenewalPackage()` 与 `createOrder()` 中高度重复(约 80% 代码雷同)。 | 提取为独立的 `PaymentGateway` 服务,采用策略模式或工厂模式封装支付渠道。 | `class PaymentFactory { public static function make($platform) { ... } }` | ## 3. 总结与行动建议 ### 🚨 优先修复的关键问题(P0) 1. **移除调试输出**:全局搜索并删除 `echo`、`var_dump`、`print_r`,避免破坏 API 响应格式。 2. **修复 SQL 注入**:对所有动态拼接的 `IN (...)` 或 `WHERE` 条件执行 `array_map('intval', $array)` 或使用查询构造器绑定参数。 3. **统一金额计算**:引入 `bcmath` 或转为“分”整数计算,替换所有 `sprintf("%.2f")` 及直接浮点加减乘除。 4. **清理硬编码逻辑**:恢复 `createOrder()` 中被注释的 `if ($throw_err)` 判断,或将其重构为可配置的策略规则,禁止直接覆盖 `$param['type']`。 ### 🛠 后续重构与优化方向 1. **架构解耦**: - 将 `Neworderservice` 拆分为 `PricingService`(计价)、`OrderBuilder`(订单组装)、`PaymentRouter`(支付路由)。当前单一类承担过多职责,违反单一职责原则(SRP)。 - 使用 DTO(数据传输对象)替代裸数组 `$param`,明确字段类型与必填校验。 2. **性能优化**: - 缓存静态配置:如 `count($this->CI->Ahead_vip_level_model::VIP_LEVEL_DEFAULT_NAME)` 应在类初始化时计算一次并缓存,避免循环内重复调用。 - 批量查询替代循环内查询:如 `check_room_shelf_goods` 若涉及多商品,应改为 `WHERE IN` 批量拉取。 3. **规范与安全**: - 严格遵循 PSR-12:统一命名风格(避免 `$vv`、`$v` 等无意义变量名),添加 PHPDoc 块注释。 - 权限与越权校验:`deleteOrder()` 仅传 `order_id` 和 `uid`,建议在 Model 层或 Service 层增加 `owner_id` 校验,防止水平越权删除他人订单。 4. **框架适配提示**: - 若 `phpci` 为 CI3 衍生版,建议启用 `config/autoload.php` 预加载核心模型,减少运行时 `load->model()` 开销。 - 避免直接操作 `$CI` 超全局对象属性,推荐使用 CI 的 `Session` 库或自定义 `Context` 类传递请求级状态。 > ⚠️ **局限性说明**:`Neworderservice.php` 代码在 `$result['have_good` 处截断,未提供完整的方法返回逻辑与后续 `case` 分支。若需评估完整订单状态流转、异常回滚机制或数据库事务处理,请补充完整文件内容。 --- *此 Issue 由代码审查服务自动创建*
...
milestone_id
0
priority
0
is_closed
0
is_pull
0
num_comments
0
ref
deadline_unix
0
created_unix
1780564088
updated_unix
1780564088
closed_unix
0
is_locked
0
content_version
0
time_estimate
0
Delete
Cancel