2011-12-05 16 views
0

自分のサイトにアップロードするファイルの種類を制限したい。私は以下の関数を使っています。私は.jpg || .gif || .jpeg || .pngのif文を書くでしょうか? 私は人々がexeさんのアップロードを望んでいません。これを行う最善の方法は何ですか?アップロードするファイルの種類を制限する

if (FileUpload1.HasFile) 
    try 
    { 
     var FileExtension = Path.GetExtension(FileUpload1.PostedFile.FileName); 
     var Myguid = Guid.NewGuid().ToString("N"); 

     //Check to make sure its an allowable file to be uploaded???????????   

     var newName = Guid.NewGuid() + FileExtension; 
     //Map path to folder 
     string realpath = Server.MapPath("Pictures\\") + newName; 

     //FileUpload1.SaveAs("C:\\Users\\josh\\Desktop\\JaysVersion\\PicRatingSite\\PicRatingSite\\Pictures" + FileUpload1.FileName); 
     FileUpload1.SaveAs(realpath); 

     Label1.Text = "File name: " + 
      FileUpload1.PostedFile.FileName + "<br>" + 

      FileUpload1.PostedFile.ContentLength + " kb<br>" + 
      "Content type: " + 
      FileUpload1.PostedFile.ContentType; 


     InsertMembers insert = new InsertMembers(); 
     int age = Int32.Parse(txtAge.Text); 
     insert.InsertNewMember(txtEmail.Text, Myguid, txtName.Text, txtCity.Text, txtState.Text, txtDescription.Text, age, gender); 


     //Get Member Id to Insert into Pictures table 
     GetMemberInfo GetID = new GetMemberInfo(); 
     int UMemberId = GetID.GetMemberId(Myguid); 
     Displayme.Text = newName.ToString(); 

     //Now that i have member Id Lets insert new picture into picture table 
     Picture InsertnewPictures = new Picture(); 
     int insertpics = InsertnewPictures.InserNewPicture(UMemberId, newName, 0); 

    } 
    catch (Exception ex) 
    { 
     //Handle the error 
     throw ex; 
    } 
else 
{ 
    Label1.Text = "You have not specified a file."; 
} 
+0

を使用してアップロードするファイルの種類をフィルタリングすることができます私は、アップロードされたファイルの種類を確認するためにファイルのコレクションを見ている以外の方法はないと思います。これはやりやすいほど簡単ですが、残念なことに、このAFTERファイルが既に送信されていることを確認するだけです。新しいブラウザでは、クライアントに表示されるFILEコントロールで許可するファイル拡張子を指定できます。 –

答えて

1

ユーザーが提供するファイル名を信頼しないでください。ハックするのは簡単ではなく、アップロードする前に誰かが簡単に "rename nastyvirus.exe cutekittens.jpg"を行うことができます。実際にイメージを取得したことを確認するには、サーバー側のMIMEタイプの検出をユーザーに行う必要があります。同じことが、リモートブラウザによって提供されるMIMEタイプにも当てはまります。それは簡単に偽造され、 "nastyvirus.exe"を "text/plain"として表示することもできます。

+0

これを行う方法の簡単な例がありますか? Csharpの新機能 – CsharpBeginner

+0

申し訳ありませんが、C#で個人的に働いたことはありません。これはまさに一般的なアドバイスです。リモートユーザーが送信するものは絶対に信用しないでください。特に、フォームデータやファイルのアップロードについては、 –

+0

何年か前、私はスターターとして役立つかもしれない[小さなコンテンツ検出ライブラリ](http://www.codeproject.com/KB/cs/ContentDetectorLib.aspx)を書きました。 –

0

あなたはswitch文

var FileExtension = Path.GetExtension(FileUpload1.PostedFile.FileName); 

switch(FileExtension.ToLower()) 
{ 
    case".jpg": 
    case".png": 
    case".gif": 
    case".jpeg": 
     break; 
    default: 
     Response.Write("this file type is not allowed"); 
     return; 
} 
関連する問題