在 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
将在每个字段上调用。所以一切都在照顾。只需添加您的过滤规则。
我来详细解释一下
我想保护注入字符串的查询字符串变量
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
将在每个字段上调用。所以一切都在照顾。只需添加您的过滤规则。