【漏洞修复/安全补丁】5.4之前版本通过api/products接口进行sql注入的问题

5.4之前版本,会使用api/products接口的selectId参数进行sql注入

修复办法

1、修改crmeb/app/api/controller/v1/store/StoreProductController.php文件中的lst方法里面的接收参数,修改成下图

如果你的版本没有coupon_category_id参数的话,不需要加入第三行

复制代码
[['selectId', 'd'], 0],
[['productId', 'd'], 0],
[['coupon_category_id', 'd'], 0],

⚠️注意 : 5.3之前的版本需要修改crmeb/app/services/product/product/StoreProductServices.php文件下的getGoodsList方法中

2、下载压缩包,将里面的Request.php文件替换项目中的crmeb/app/Request.php这个文件

3、在crmeb/app/common.php 文件中最后增加下面代码

复制代码
if (!function_exists('filter_str')) {
    /**
     * 过滤字符串敏感字符
     * @param $str
     * @return array|mixed|string|string[]|null
     */
    function filter_str($str)
    {
        $rules = [
            '/\.\./', // 禁用包含 ../ 的参数
            '/\<\?/', // 禁止 php 脚本出现
            '/\bor\b.*=.*/i', // 匹配 'or 1=1',防止 SQL 注入(注意边界词 \b 和不区分大小写 i 修饰符)
            '/(select[\s\S]*?)(from|limit)/i', // 防止 SQL 注入
            '/(union[\s\S]*?select)/i', // 防止 SQL 注入
            '/(having|updatexml|extractvalue)/i', // 防止 SQL 注入
            '/sleep\((\s*)(\d*)(\s*)\)/i', // 防止 SQL 盲注
            '/benchmark\((.*)\,(.*)\)/i', // 防止 SQL 盲注
            '/base64_decode\(/i', // 防止 SQL 变种注入
            '/(?:from\W+information_schema\W)/i', // 注意这里的 (?:...) 是不合法的,应该是 (?:...) 表示非捕获组,但通常我们不需要这个
            '/(?:current_|user|database|schema|connection_id)\s*\(/i', // 防止 SQL 注入(注意去掉了不必要的 (?:...))
            '/(?:etc\/\W*passwd)/i', // 防止窥探 Linux 用户信息
            '/into(\s+)(?:dump|out)file\s*/i', // 禁用 MySQL 导出函数
            '/group\s+by.+\(/i', // 防止 SQL 注入
            '/(?:define|eval|file_get_contents|include|require|require_once|shell_exec|phpinfo|system|passthru|preg_\w+|execute|echo|print|print_r|var_dump|(fp)open|alert|showmodaldialog)\(/i', // 禁用 webshell 相关某些函数
            '/(gopher|doc|php|glob|file|phar|zlib|ftp|ldap|dict|ogg|data)\:\/\//i', // 防止一些协议攻击(注意协议后的三个斜杠)
            '/\$_(GET|POST|COOKIE|FILES|SESSION|ENV|GLOBALS|SERVER)\[/i', // 禁用一些内置变量,注意 PHP 变量名通常是大写的
            '/<(iframe|script|body|img|layer|div|meta|style|base|object|input)/i', // 防止 XSS 标签植入
            '/(onmouseover|onerror|onload|onclick)\=/i', // 防止 XSS 事件植入
            '/\|\|.*?(?:ls|pwd|whoami|ll|ifconfig|ipconfig|&&|chmod|cd|mkdir|rmdir|cp|mv)/i', // 防止执行 shell(注意去掉了不合适的 ifconfog)
            '/\sand\s+.*=.*/i' // 匹配 and 1=1
        ];
        if (filter_var($str, FILTER_VALIDATE_URL)) {
            $url = parse_url($str);
            if (!isset($url['scheme'])) return $str;
            $host = $url['scheme'] . '://' . $url['host'];
            $str = $host . preg_replace($rules, '', str_replace($host, '', $str));
        } else {
            $str = preg_replace($rules, '', $str);
        }
        return $str;
    }
}

Copy

4、修改crmeb/app/model/product/product/StoreCategory.php,修改whereIn的第二个参数为

复制代码
is_array($value) ? $value : (string)$value
相关推荐
喵个咪43 分钟前
GoWind 拆解:全链 ID 类型体系——int64 定版与前端字符串化契约
前端·后端·go
喵个咪1 小时前
GoWind CMS 拆解:Flutter 设计系统内核——双态 token、四档断点与自适应壳层
前端·flutter·交互设计
xys_6781 小时前
JavaEE通关手册:初识Java
java·开发语言
喵个咪1 小时前
GoWind CMS 拆解:发布审批——多级推进、逐级角色与全程留痕
前端·后端·go
Starry-sky(jing)1 小时前
Vidda ADB 开启:R Pro 65 找不到开发者选项的处理与连接验收
android·adb·远程控制·电视·vidda
喵个咪1 小时前
GoWind Flow 拆解:一个 Go 工作流引擎与它的双模式设计器
前端·后端·go
雨白1 小时前
从原理到实践:使用 Kotlin KSP 仿写 ButterKnifeLite
android·kotlin
喵个咪2 小时前
GoWind Admin 拆解:打印模板设计器——从画布到服务端 PDF 的完整打印链路
前端·后端·go
总要学点什么2 小时前
第96篇:三维数据加载-城市建筑白模样式+着色器——让色带按体量上色,最白的那档却涂不上去
前端·gis·webgl·cesium·着色器·空间分析·白模
ShineWinsu2 小时前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget