2
私はファイルアップロードでフォームを持っていますが、残念ながらphp webshellのような悪意のあるファイルをアップロードすることができます。悪意のあるファイルのアップロードを防ぐには?
ここに私のコントローラコードです。
public function actionIndex()
{
$model = new TbBank();
$searchModel = new TbBankSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
if ($model->load(Yii::$app->request->post())) {
//get the instance of the uploaded file
//return \yii\helpers\VarDumper::dump($model);
$model->bank_code = Html::encode($model->bank_code);
$model->nama = Html::encode($model->nama);
$imageName = $model->bank_code;
$model->file = UploadedFile::getInstance($model,'file');
//save the path in the db column
$path_image = \Yii::$app->params['uploadPath']."bank/";
$model->logo = $imageName.'.'.$model->file->extension;
$model->save();
if ($model->file->saveAs($path_image.$imageName.'.'.$model->file->extension)){
return $this->redirect(['index', 'id' => $model->bank_id]);
}else{
\yii\helpers\VarDumper::dump($model);
}
} else {
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'model' => $model,
]);
}
}
、ここで私のTbBankモデル法規則は
public function rules()
{
return [
[['bank_code', 'nama'], 'required'],
[['bank_code'], 'string', 'max' => 10],
[['nama'], 'string', 'max' => 50],
[['logo'], 'string', 'max' => 200],
[['file'],'file','skipOnEmpty'=>true,'extensions'=>'gif,jpg,jpeg,png','maxSize'=>100*1024*1],
[['file'],'required','on'=>'create'],
];
}
である私が必要とするどのファイルが安全である場合は、ユーザーが送信したときに悪質なファイルが含まれている場合、それがアップロードされたファイルをチェックしているそれは、ファイルを保存し、他のエラーが返されますストレージに保存してから保存してください。
yii2のようないくつかのグーグルの後には、悪質なファイルをチェックする機能が組み込まれていません。
ありがとうございます。