2016-12-15 5 views
-1

ASP.NET FileUploadコントロールとボタンを使用して.csvファイルをサーバーにアップロードします。有効な.csvファイルであるかどうかはどうすればわかりますか?私はハッカーがファイルまたはの中にスクリプトを書くことができ、abc.exeをabc.csvに変換してサーバをアップロードできることを意味します。 2番目のケースでは、abc.csvファイルを実行する方法はありますか?そうであれば、回避する方法はありますか?ユーザー提供のCSVファイルを処理する際のリスク

私はファイルを読んで、(名前、年齢、生年月日など)正しいフォーマットであれば、データベースに挿入します。しかし、ハッカーは( 'すべての情報を取得'、 'から'、 'データベース')のようなスクリプトを書くことができます。 私はSQL ServerとC#を使用しています。 私はインターネットで多くの研究をしましたが、csvではなく、画像に関する記事がたくさんあります。

サーバーにロードする際にcsvファイルのリスクは何ですか?ファイルにマクロウイルスなどがあるかどうかを確認するにはどうすればよいですか? 私は私の問題を説明できることを願っています。 あなたの意見をお知らせください。

private void ReadCSVFile(string filepath) 
    { 
     receiverList = new List<ReceiverUser>(); 

     try 
     { 
      if (filepath == string.Empty) 
       return; 

      using (StreamReader sr = new StreamReader(filepath)) 
      { 
       string line; 

       while ((line = sr.ReadLine()) != null) 
       { 
        SplitLine(line); 
       } 
      } 

      #region row add test 
      DataTable dt = new DataTable(); 

      if (dt.Columns.Count == 0) 
      { 
       dt.Columns.Add("Name", typeof(string)); 
       dt.Columns.Add("Mail", typeof(string)); 
       dt.Columns.Add("Amount", typeof(double)); 
      } 

      DataRow NewRow; 

      foreach (var item in receiverList) 
      { 
       NewRow = dt.NewRow(); 
       NewRow[0] = item.Name + " " + item.Surname; 
       NewRow[1] = item.Mail; 
       NewRow[2] = item.Amount; 
       dt.Rows.Add(NewRow); 
      } 



      grdRec.DataSource = dt; 
      grdRec.DataBind(); 

      #endregion 
     } 
     catch (Exception) 
     { 

     } 

    } 

私はStreamReaderを使用してファイルを読み取りました。したがって、csvファイルのパラメータの1つにマクロコードが含まれていると、それは直接実行されますか?私が望むのは、それを実際に知ることだけです。

+0

ファイルを読むか、実行します。実行可能コードを含むファイルを読み込んでもコードは実行されません。ファイル内のSQLのセクションを、挿入時にSQLとして実行できるかどうかは、最初にSQLコマンドをどのように作成するかによって異なります。また、マクロウイルス(またはEXIFエクスプロイトなど)は、フォーマットを理解しているプログラム(またはライブラリ)がファイルを読み込み、実際のフォーマットのインタプリタを持っていれば実行されます。だから、要するに:あなたのコードを見せてください。 – CodeCaster

+0

私のコードを確認できますか? – onur

+1

'if(dt.Columns.Count == 0)'をチェックする必要はありません。最初にDataTableを作成すると、列は存在しません。また、 'DataRow NewRow;'をforループに移動して 'DataRow NewRow = dt.NewRow();'にし、変数のスコープを適切に設定します。最後に、空のキャッチブロックはありません。エラーについて何もできない場合は、それをキャッチしないでください。少なくともそこにログインするか、何か問題が発生したという警告をユーザーに出す。 – mason

答えて

関連する問題