2016-12-19 5 views
2

私はファイルアップロードでフォームを持っていますが、残念ながらphp webshel​​lのような悪意のあるファイルをアップロードすることができます。悪意のあるファイルのアップロードを防ぐには?

ここに私のコントローラコードです。

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のようないくつかのグーグルの後には、悪質なファイルをチェックする機能が組み込まれていません。

ありがとうございます。

答えて

1

正しくチェックしていないと、どのように検証ルールが機能すると思いますか?

public function actionIndex() 
{ 
    // ... 

    if ($model->load(Yii::$app->request->post())) { 

     // ... 

     // first prepare UploadedFile instance 
     $model->file = UploadedFile::getInstance($model,'file'); 

     // THEN run validation AND IF everything is OK move on 
     if ($model->validate()) { 

      // VERIFY if save() is successful 
      if ($model->save()) { 

       // THEN try to save file 
       if ($model->file->saveAs($path_image.$imageName.'.'.$model->file->extension)){ 
        // ... 
       } 
      } 
     } 
    } 
} 
関連する問題