在 Laravel 中,我如何为中间件中的所有输入过滤请求对象中的字符串?

In Laravel how do i filter string on reuqest object for all inputs in middleware?

我来详细解释一下

我想保护注入字符串的查询字符串变量

URL: http://domainname.com/report?start_date='; SELECT; --

就像你在上面看到的那样 URL 有一些意外的字符串,我想 trim 在控制器上使用 $request 对象

例如:$start_date = $request->get('start_date');

然后我直接将这个 $start_date 用于查询 我不想对此使用验证器我怎么能对所有输入使用中间件(不特定于 start_date) 获取所有输入和剥离标签并删除特殊字符

您已经拥有名为 TrimStrings 的中间件,它通常位于

/app/Http/Middlware/TrimStrings.php

之后你可以覆盖函数transform所以它看起来像这样

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;

class TrimStrings extends Middleware
{
    /**
     * The names of the attributes that should not be trimmed.
     *
     * @var array
     */
    protected $except = [
        'password',
        'password_confirmation',
    ];
    
    protected function transform($key, $value)
    {
        $value = htmlentities($value);
        $value = htmlspecialchars($value);
        $value = $this->myCustomFilteringFunction(); // You can add your function and to whatever you want
        
        if (in_array($key, $this->except, true)) {
            return $value;
        }

        return is_string($value) ? trim($value) : $value;
    }
}

无需重新发明轮子此中间件方法 transform 将在每个字段上调用。所以一切都在照顾。只需添加您的过滤规则。