5.4之前版本,會(huì)使用api/products接口的selectId參數(shù)進(jìn)行sql注入
修復(fù)辦法
1、修改crmeb/app/api/controller/v1/store/StoreProductController.php文件中的lst方法里面的接收參數(shù),修改成下圖
如果你的版本沒(méi)有coupon_category_id參數(shù)的話,不需要加入第三行
[['selectId', 'd'], 0],
[['productId', 'd'], 0],
[['coupon_category_id', 'd'], 0],
??注意 : 5.3之前的版本需要修改crmeb/app/services/product/product/StoreProductServices.php文件下的getGoodsList方法中
2、下載壓縮包,將里面的Request.php文件替換項(xiàng)目中的crmeb/app/Request.php這個(gè)文件
3、在crmeb/app/common.php 文件中最后增加下面代碼
if (!function_exists('filter_str')) {
/**
* 過(guò)濾字符串敏感字符
* @param $str
* @return array|mixed|string|string[]|null
*/
function filter_str($str)
{
$rules = [
'/\.\./', // 禁用包含 ../ 的參數(shù)
'/\<\?/', // 禁止 php 腳本出現(xiàn)
'/\bor\b.*=.*/i', // 匹配 'or 1=1',防止 SQL 注入(注意邊界詞 \b 和不區(qū)分大小寫(xiě) 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', // 注意這里的 (?:...) 是不合法的,應(yīng)該是 (?:...) 表示非捕獲組,但通常我們不需要這個(gè)
'/(?:current_|user|database|schema|connection_id)\s*\(/i', // 防止 SQL 注入(注意去掉了不必要的 (?:...))
'/(?:etc\/\W*passwd)/i', // 防止窺探 Linux 用戶(hù)信息
'/into(\s+)(?:dump|out)file\s*/i', // 禁用 MySQL 導(dǎo)出函數(shù)
'/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 相關(guān)某些函數(shù)
'/(gopher|doc|php|glob|file|phar|zlib|ftp|ldap|dict|ogg|data)\:\/\//i', // 防止一些協(xié)議攻擊(注意協(xié)議后的三個(gè)斜杠)
'/\$_(GET|POST|COOKIE|FILES|SESSION|ENV|GLOBALS|SERVER)\[/i', // 禁用一些內(nèi)置變量,注意 PHP 變量名通常是大寫(xiě)的
'/<(iframe|script|body|img|layer|div|meta|style|base|object|input)/i', // 防止 XSS 標(biāo)簽植入
'/(onmouseover|onerror|onload|onclick)\=/i', // 防止 XSS 事件植入
'/\|\|.*?(?:ls|pwd|whoami|ll|ifconfig|ipconfig|&&|chmod|cd|mkdir|rmdir|cp|mv)/i', // 防止執(zhí)行 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;
}
}
4、修改crmeb/app/model/product/product/StoreCategory.php,修改whereIn的第二個(gè)參數(shù)為
is_array($value) ? $value : (string)$value