Dalam aplikasi web saya (asp.net, c #) Saya mengunggah file video dalam satu halaman tetapi saya hanya ingin mengunggah video flv. Bagaimana saya bisa membatasi ketika saya mengunggah video ekstensi lainnya?
Ini memungkinkan seseorang mengubah nama file * .flv dan mengunggahnya. Bergantung pada apa persyaratan Anda, Anda mungkin ingin memeriksa jenis MIME juga.
David Glenn
Bukankah tipe MIME biasanya diatur sesuai dengan ekstensi nama file?
Thilo
@ Thilo, Anda benar, tetapi ekstensi dapat diubah tanpa mengubah tipe konten mime. Jenis pantomim menggambarkan data yang terkandung dalam file, sehingga dapat ditangani dengan tepat lihat en.wikipedia.org/wiki/MIME
Mark Dickinson
2
Tidak, cara yang lebih baik adalah memeriksa konten file. Penting untuk memeriksa tanda tangan flv.
Marat Faskhiev
Hanya untuk menambahkan ini karena masih merupakan jawaban yang populer - argumen tipe MIME sama tidak amannya dengan ekstensi karena keduanya dapat dipalsukan. Kombinasi dari kedua pemeriksaan mungkin merupakan solusi yang masuk akal tetapi pada akhirnya jika keamanan menjadi perhatian maka harus ada pemeriksaan yang lebih ketat misalnya memblokir file yang tidak ditandatangani atau pengambilan sampel konten.
James
21
Anda cukup membaca aliran file
using (var target =newMemoryStream()){
postedFile.InputStream.CopyTo(target);vararray= target.ToArray();}
Indeks 5/6 pertama akan memberi tahu Anda jenis file. Dalam hal FLV 70, 76, 86, 1, 5 .
Anda tidak akan dapat membatasi jenis file yang diunggah pengguna di sisi klien [*]. Anda hanya dapat melakukan ini di sisi server. Jika pengguna mengunggah file yang salah, Anda hanya akan dapat mengenali bahwa setelah file diunggah, diunggah. Tidak ada cara yang dapat diandalkan dan aman untuk menghentikan pengguna mengunggah format file apa pun yang mereka inginkan.
[*] Ya, Anda dapat melakukan segala macam hal pintar untuk mendeteksi ekstensi file sebelum memulai unggahan, tetapi jangan bergantung padanya. Seseorang akan mengatasinya dan mengunggah apa pun yang mereka suka cepat atau lambat.
Meskipun ia tidak dapat mencegah seorang hacker mengunggah apa yang diinginkannya, ia tetap harus memeriksa sisi klien sebagai kemudahan bagi pengguna. Pengunggah Flash harus dapat memeriksa jenis file.
Thilo
1
OP tidak menyebutkan pengunggah Flash (yaitu 'pengunggah ditulis dalam Flash', bukan 'pengunggah konten Flash'). Pertanyaannya ditandai dengan asp.net dan tag #, dan dengan pilihan teknologi itu, pemeriksaan sisi klien terbatas dan mudah dikalahkan. :)
ZombieSheep
Untuk situs unggahan video, ia harus memiliki sesuatu yang lebih baik di sisi klien daripada formulir unggahan HTML. Unggahan multi-MB tanpa bilah kemajuan tidak menyenangkan.
Thilo
ok Anda mengatakan bahwa cek sisi klien tidak banyak yang baik bagaimana saya bisa cek di sisi server Mr. ZombieSheep
Surya sasidhar
@Thilo - Saya sangat setuju, tetapi pertanyaannya adalah tentang formulir unggah ASP.net. Terserah OP apakah menurutnya itu cukup baik atau tidak.
ZombieSheep
2
Anda dapat memeriksa tanda tangan .flv. Anda dapat mengunduh spesifikasi di sini:
Menemukan solusi alternatif di DotNetPerls yang saya sukai lebih baik karena tidak mengharuskan Anda menentukan jalur. Berikut adalah contoh di mana saya mengisi array dengan bantuan metode kustom
// This custom method takes a path // and adds all files and folder names to the 'files' arraystring[] files =Utilities.FileList("C:\", "");// Then for each array item...foreach(string f in files){// Here is the important line I used to ommit .DLL files:if(!f.EndsWith(".dll",StringComparison.Ordinal))// then populated a listBox with the array contents
myListBox.Items.Add(f);}
Jawaban:
Path.GetExtension
sumber
Anda cukup membaca aliran file
Indeks 5/6 pertama akan memberi tahu Anda jenis file. Dalam hal FLV 70, 76, 86, 1, 5 .
jika
isAllowed
samatrue
maka FLV-nya.ATAU
Baca konten file
Dua / tiga huruf pertama akan memberi tahu Anda jenis file.
Dalam hal FLV, "FLV ......"
sumber
Di server Anda dapat memeriksa tipe MIME, mencari tipe flime mime di sini atau di google.
Anda harus memeriksa bahwa jenis mime adalah
Misalnya, jika Anda menggunakan FileUpload di C #, Anda bisa melakukannya
sumber
Saya tidak yakin apakah ini yang Anda inginkan tetapi:
Atau:
sumber
Selain itu, jika Anda memiliki
FileInfo fi
, Anda dapat melakukan:dan itu akan menahan ekstensi file (catatan: itu akan mencakup
.
, jadi hasil di atas bisa menjadi:,.jpg
.txt
dan seterusnya ....sumber
Anda tidak akan dapat membatasi jenis file yang diunggah pengguna di sisi klien [*]. Anda hanya dapat melakukan ini di sisi server. Jika pengguna mengunggah file yang salah, Anda hanya akan dapat mengenali bahwa setelah file diunggah, diunggah. Tidak ada cara yang dapat diandalkan dan aman untuk menghentikan pengguna mengunggah format file apa pun yang mereka inginkan.
[*] Ya, Anda dapat melakukan segala macam hal pintar untuk mendeteksi ekstensi file sebelum memulai unggahan, tetapi jangan bergantung padanya. Seseorang akan mengatasinya dan mengunggah apa pun yang mereka suka cepat atau lambat.
sumber
Anda dapat memeriksa tanda tangan .flv. Anda dapat mengunduh spesifikasi di sini:
http://www.adobe.com/devnet/flv/
Lihat bab "Header FLV".
sumber
Berakhir dengan()
Menemukan solusi alternatif di DotNetPerls yang saya sukai lebih baik karena tidak mengharuskan Anda menentukan jalur. Berikut adalah contoh di mana saya mengisi array dengan bantuan metode kustom
sumber
Metode di atas berfungsi baik dengan firefox dan IE, saya dapat melihat semua jenis file seperti zip, txt, xls, xlsx, doc, docx, jpg, png
tetapi ketika saya mencoba menemukan ekstensi file dari googlechrome, saya gagal.
sumber
Perlu disebutkan bagaimana cara menghapus ekstensi secara paralel dengan mendapatkan ekstensi:
sumber
Solusi ini juga membantu dalam kasus lebih dari satu ekstensi seperti "Avishay.student.DB"
sumber