<?php
namespace app\middleware;
use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;
class ParamFilterMiddleware implements MiddlewareInterface
{
public function process(Request $request, callable $handler): Response
{
// 获取 POST 参数
$param = $request->post();
// 确保 $param 是数组
if (!is_array($param)) {
$param = [];
}
// 过滤参数
$param = array_map(function($value) {
// 去除空格
$value = trim($value);
// 去除 HTML 标签
$value = strip_tags($value);
// 进一步过滤 SQL 注入风险
$value = preg_replace('/[\'\"\\\;]+/', '', $value); // 去除引号和分号等
// dump($value);
return $value;
}, $param);
dump('------------------',$param);
// 将过滤后的参数重新设置回请求
$request->post($param);
return $handler($request);
}
}
我写了个过滤的中间件,并且注册了中间件:
return [
// 全局中间件
'' => [
// 过滤请求参数的中间件
\app\middleware\ParamFilterMiddleware::class,
]
];
但是我在控制器里用 $param = $request->all(); 或者 $param = $request->post(); 接收不到,啥原因?
$request->post($param);
这个post只能取值,不能赋值
用orm 就不用担心注入的问题了,最好不要自己手动拼接sql 代码复杂度高不说 还容易出问题