พูดอย่างเคร่งครัดคำตอบคือไม่มี นักพัฒนาไม่สามารถป้องกันผู้ใช้จากการอัปโหลดไฟล์ประเภทหรือส่วนขยายใด ๆ
แต่ถึงกระนั้นคุณสมบัติการยอมรับของ<input type = "file">
สามารถช่วยให้ตัวกรองในกล่องโต้ตอบเลือกไฟล์ของระบบปฏิบัติการ ตัวอย่างเช่น,
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox 42+) -->
<input type="file" accept=".xls,.xlsx" />
ควรมีวิธีในการกรองไฟล์อื่นที่ไม่ใช่. xls หรือ. xlsx ถึงแม้ว่าหน้าMDNสำหรับinput
องค์ประกอบจะกล่าวว่ามันสนับสนุนสิ่งนี้ แต่ก็ไม่ได้ผลสำหรับฉันใน Firefox จนถึงรุ่น 42 ซึ่งสามารถใช้งานได้ใน IE 10+, Edge และ Chrome
ดังนั้นสำหรับการสนับสนุน Firefox ที่มีอายุมากกว่า 42 พร้อมกับ IE 10+, Edge, Chrome และ Opera ฉันคิดว่าเป็นการดีกว่าที่จะใช้รายการ MIME-types ที่คั่นด้วยเครื่องหมายจุลภาค:
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
[ ลักษณะการทำงานEdge (EdgeHTML): ดรอปดาวน์ตัวกรองประเภทไฟล์จะแสดงประเภทไฟล์ที่กล่าวถึงที่นี่ แต่ไม่ใช่ค่าเริ่มต้นในดรอปดาวน์ ตัวกรองเริ่มต้นคือAll files (*)
]
นอกจากนี้คุณยังสามารถใช้เครื่องหมายดอกจันในประเภท MIME ตัวอย่างเช่น:
<input type="file" accept="image/*" /> <!-- all image types -->
<input type="file" accept="audio/*" /> <!-- all audio types -->
<input type="file" accept="video/*" /> <!-- all video types -->
W3C แนะนำให้ผู้เขียนระบุทั้งประเภท MIME และส่วนขยายที่เกี่ยวข้องในaccept
แอตทริบิวต์ ดังนั้นวิธีที่ดีที่สุดคือ:
<!-- Right approach: Use both file extensions and corresponding MIME-types. -->
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept=".xls,.xlsx, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
JSFiddle ของเดียวกัน: ที่นี่
การอ้างอิง: รายการประเภท MIME
สำคัญ:การใช้แอaccept
ททริบิวให้วิธีการกรองในไฟล์ประเภทที่น่าสนใจเท่านั้น เบราว์เซอร์ยังอนุญาตให้ผู้ใช้เลือกไฟล์ประเภทใดก็ได้ ควรทำการตรวจสอบเพิ่มเติม (ฝั่งไคลเอ็นต์) (โดยใช้ JavaScript วิธีนี้จะเป็นอย่างนั้น ) และประเภทไฟล์ที่แน่นอนต้องตรวจสอบบนเซิร์ฟเวอร์โดยใช้การรวมกันของประเภท MIME โดยใช้ทั้งนามสกุลไฟล์และลายเซ็นไบนารี ( ASP) .NET , PHP , Ruby , Java ) คุณอาจต้องการอ้างถึงตารางเหล่านี้ สำหรับประเภทไฟล์และหมายเลขเวทย์มนตร์เพื่อทำการตรวจสอบฝั่งเซิร์ฟเวอร์ที่มีประสิทธิภาพยิ่งขึ้น
ต่อไปนี้เป็นสามการ อ่านที่ดี สำหรับการอัปโหลดไฟล์และความปลอดภัย
แก้ไข: บางทีการตรวจสอบประเภทไฟล์โดยใช้ลายเซ็นไบนารีของมันยังสามารถทำได้ในฝั่งไคลเอ็นต์โดยใช้ JavaScript (แทนที่จะเพียงแค่ดูที่ส่วนขยาย) โดยใช้ HTML5 File API แต่ยังคงต้องตรวจสอบไฟล์บนเซิร์ฟเวอร์เนื่องจากผู้ใช้ที่ประสงค์ร้าย จะยังคงสามารถอัปโหลดไฟล์ได้โดยทำคำขอ HTTP ที่กำหนดเอง