asp.net(C#)檢測真實檔案類型

來源:互聯網
上載者:User

網站曾經被上傳一個.asa檔案,修改尾碼名為.rar然後逃過了我的簡單尾碼名判斷。
結果網站被掛馬,幸虧麻煩不大,現在已經加上真實檔案類型判斷了,安全多了。

大氣象

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TrueFile.aspx.cs" Inherits="test_TrueFile" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>無標題頁</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="uploadFile" runat="server" />
        <asp:Button ID="btnOk" runat="server" Text="判斷" OnClick="btnOk_Click" />
    </div>
    </form>
</body>
</html>

 

 

大氣象

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class test_TrueFile : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    /// <summary>
    /// C#檢測真實檔案類型函數
    /// </summary>
    /// <param name="hifile"></param>
    /// <returns></returns>
    private bool IsAllowedExtension(HttpPostedFile hifile)
    {
        bool ret = false;

        System.IO.FileStream fs = new System.IO.FileStream(hifile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
        System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
        string fileclass = "";
        byte buffer;
        try
        {
            buffer = r.ReadByte();
            fileclass = buffer.ToString();
            buffer = r.ReadByte();
            fileclass += buffer.ToString();
        }
        catch
        {
            return false;
        }
        r.Close();
        fs.Close();
        /*副檔名說明
         *4946/104116 txt
         *7173        gif 
         *255216      jpg
         *13780       png
         *6677        bmp
         *239187      txt,aspx,asp,sql
         *208207      xls.doc.ppt
         *6063        xml
         *6033        htm,html
         *4742        js
         *8075        xlsx,zip,pptx,mmap,zip
         *8297        rar   
         *01          accdb,mdb
         *7790        exe,dll           
         *5666        psd 
         *255254      rdp 
         *10056       bt種子 
         *64101       bat 
         *4059        sgf
         */

        //String[] fileType = { "255216", "7173", "6677", "13780", "8297", "5549", "870", "87111", "8075" };

        //純圖片
        String[] fileType = { 
            "7173",    //gif
            "255216",  //jpg
            "13780"    //png
        };

        for (int i = 0; i < fileType.Length; i++)
        {
            if (fileclass == fileType[i])
            {
                ret = true;
                break;
            }
        }
        Response.Write(fileclass);//可以在這裡輸出你不知道的檔案類型的副檔名
        return ret;
    }
    protected void btnOk_Click(object sender, EventArgs e)
    {
        if (IsAllowedExtension(uploadFile.PostedFile))
        {
            Response.Write("ok");
        }
    }
}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.