我不确定检查插入的恶意代码是否有用,但我想实现它。
我想用一些Laravel验证来检查文件名字符串,如果可能的话,没有php特定的函数。
这是我的代码段:
$valiadateResult = Validator::make
(
$inReq->all(),
[
'atitle' => 'required',
'keyw' => 'max:255|alpha_num',
'gkeyw' => 'max:255|alpha_num',
'up' => 'nullable|alpha_num|mimes:jpeg,jpg,png,gif,mp3,pdf|max:100000',
'intro' => 'max:255',
'full' => 'max:2000',
]
);
因此up
部分是文件验证,但它不检查文件名。
我试了一下,但alpa_num在这种情况下不起作用。
那么使用一些Laravel功能是否有解决方案?或者我应该自己使用一些PHP逻辑来验证?或者你认为没有必要验证这样的输入?
答案 0 :(得分:0)
此外,您可以使用"文件"验证
验证字段必须是成功上传的文件。
'up' => 'file|nullable|alpha_num|mimes:jpeg,jpg,png,gif,mp3,pdf|max:100000',
答案 1 :(得分:0)
您需要在输入和规则中添加另一个名为filename
的文件。
$filename = $request->file('up')->getClientOriginalName();
$allInput = $inReq->all();
$allInput['filename'] = $filename;
$valiadateResult = Validator::make
(
$allInput,
[
'atitle' => 'required',
'keyw' => 'max:255|alpha_num',
'gkeyw' => 'max:255|alpha_num',
'up' => 'nullable|alpha_num|mimes:jpeg,jpg,png,gif,mp3,pdf|max:100000',
'filename' => 'alpha_num',
'intro' => 'max:255',
'full' => 'max:2000',
]
);
你会得到文件名错误
答案 2 :(得分:0)
Filename
,并将其放在路径app/Rules/Filename.php
上。<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class Filename implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
if (!($value instanceof UploadedFile) || !$value->isValid()) {
return false;
}
return preg_match('/^[\pL\pM\pN]+$/u', $value->getClientOriginalName()) > 0;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The :attribute name is invalid.';
}
}
use App\Rules\Filename;
$valiadateResult = Validator::make(
$inReq->all(),
[
'atitle' => 'required',
'keyw' => 'max:255|alpha_num',
'gkeyw' => 'max:255|alpha_num',
'up' => ['nullable', new Filename, 'mimes:jpeg,jpg,png,gif,mp3,pdf', 'max:100000'],
'intro' => 'max:255',
'full' => 'max:2000',
]
);