【问题标题】:I want to add a custom Middleware to check any script in POST request, how to do that?我想添加一个自定义中间件来检查 POST 请求中的任何脚本,该怎么做?
【发布时间】:2025-12-12 13:15:01
【问题描述】:

我想检查来自我的应用程序中各种用户输入表单的 POST 请求是否包含任何恶意代码脚本或 HTML 标记,如果发现任何我想重定向回表单页面并显示这些脚本字符不存在的消息允许。我可以在控制器中检查这个功能,但我想用中间件来做这个,怎么做,有人能帮我吗??

请注意,我只是一个初学者,不是专家,所以请原谅我在问题或逻辑上的任何错误。

预期的结果是,我想检查表单提交是否任何输入字段包含任何脚本标签?我想通过 MIDDLEWARE 实现这一点,这样我就可以在我想要检查的请求中包含这个中间件。

【问题讨论】:

  • Vishal 请阅读文档laravel.com/docs/5.8/middleware 并在提问之前尝试。如果您仍然遇到错误,请将其发布在 * 中,以便有人会回答您的问题。谢谢
  • $this->validate(request(), [ 'input_name' => 'required|regex:/^[a-zA-Z]+$/u|max:255', ]); 试试这个
  • 感谢您的回复,但我想检查发布请求中的每个输入字段。您的代码将在一个输入字段 input_name 上运行。
  • 如果你担心 XSS 攻击或 SQL 注入,Laravel 会自动检查这些东西,你可以放心这种攻击
  • 开箱即用的 Laravel 可以满足您的需求,它会检查这些字符并尝试在将它们发送到数据库之前对其进行转义,但如果您根本不希望将它们放在数据库中,您可以仍然使用中间件来实现,但首先必须将这些字符与正则表达式匹配,然后将帖子返回给用户。

标签: php laravel laravel-5.7


【解决方案1】:

您可以使用类似以下的方法来检查来自 POST 或 GET 的输入。

public function handle($request, Closure $next)
{
    $this->checkRequest($request);

    $response = $next($request);

    return $response;
}

private function checkRequest($request)
{
    print_r($request->all());

    // you can check for request method here as well
    // $request->isMethod('POST') etc
    // ofcourse i am not checking for malicious code you can do that much better or loop through request parameters thats upto you 

    if ($request->has('some') && $this->isMalicious($request->get('some'))) {
        return redirect()->route('go/home')->with(['message' => 'found some in request']);
    }
}

private function isMalicious($input)
{
     if ($input == 'something') return true;

     return false;
}

如何制作中间件以及如何将其分配给某些路由或组或全局可以在这里找到https://laravel.com/docs/5.8/middleware#global-middleware

【讨论】:

    最近更新 更多