上傳檔案校驗

2021-09-02 12:39:06 字數 3524 閱讀 9712

為了防止一些使用者將一些病毒檔案上傳到伺服器,我們一般需要對上傳的檔案做合法性校驗, 當時有時候簡單的字尾和contenttype校驗任然還有風險,下面我們一起來討論一下上傳的檔案需要做哪些合法性校驗。

1、檔案字尾校驗

這層校驗應該說是最基本的校驗了,我們不能允許使用者上傳一些exe、jsp、php、asp、html等可執行的檔案。

2、contenttype校驗

contenttype是內容型別,它會告訴瀏覽器用什麼形式、什麼編碼來讀取這個檔案。因此檔案字尾和contenttype有乙個對應關係,上傳檔案的字尾和contenttype應該是對應的,如果不對應則上傳資訊已被篡改。字尾和contenttype關係表參考tomcat下conf/web.xml中。

3、上傳校驗

如果需要上傳的檔案是,必須對上傳的檔案是否是乙個進行檢驗,否則如果使用者將乙個html檔案修改字尾為並上傳,在顯示該時就會執行html檔案中的內容,帶來跨域攻擊風險。

校驗方式

(1)、通過imageio讀取檔案,如果丟擲異常或者讀取後的物件為null,表示該檔案不是

/**

* 通過讀取檔案資訊判斷檔案是否是

* @param imagefile

* @return

*/public static boolean checkimagefilebyread(file imagefile)

} catch (ioexception e)

return true;

}

(2)、通過imageio讀取檔案成流,如果丟擲異常或者讀取後的流物件為null,表示檔案不是

/**

* 通過將檔案轉換為流方式監測檔案是否為

* @param imagefile

* @return

*/public static boolean checkimagefilebyis(file imagefile)

is.close();

} catch (ioexception e)

return true;

}

(3)有些中可能會嵌入iframe,以同樣會導致跨域攻擊,可以採用新增水印方式解決

/**

* 給新增水印、可設定水印旋轉角度

* * @param iconpath

* 水印路徑

* @param srcimgpath

* 源路徑

* @param targerpath

* 目標路徑

* @param degree

* 水印旋轉角度

* @param width

* 寬度(與左相比)

* @param height

* 高度(與頂相比)

* @param clarity

* 透明度(小於1的數)越接近0越透明

*/public static void watermarkimagebyicon(string iconpath, string srcimgpath,

string targerpath, integer degree, integer width, integer height,

float clarity)

// 水印圖象的路徑 水印一般為gif或者png的,這樣可設定透明度

imageicon imgicon = new imageicon(iconpath);

// 得到image物件。

image img = imgicon.getimage();

float alpha = clarity; // 透明度

g.setcomposite(alphacomposite.getinstance(alphacomposite.src_atop,

alpha));

// 表示水印的位置

g.drawimage(img, width, height, null);

g.setcomposite(alphacomposite.getinstance(alphacomposite.src_over));

g.dispose();

os = new fileoutputstream(targerpath);

// 生成

system.out.println("新增水印完成!");

} catch (exception e) finally catch (exception e) }}

/*** 給新增水印、可設定水印旋轉角度

* * @param logotext

* 水印文字

* @param srcimgpath

* 源路徑

* @param targerpath

* 目標路徑

* @param degree

* 水印旋轉角度

* @param width

* 寬度(與左相比)

* @param height

* 高度(與頂相比)

* @param clarity

* 透明度(小於1的數)越接近0越透明

*/public static void watermarkbytext(string logotext, string srcimgpath,

string targerpath, integer degree, integer width, integer height,

float clarity)

// 設定顏色

g.setcolor(color.red);

// 設定 font

g.setfont(new font("宋體", font.bold, 30));

float alpha = clarity;

g.setcomposite(alphacomposite.getinstance(alphacomposite.src_atop,

alpha));

// 第一引數->設定的內容,後面兩個引數->文字在上的座標位置(x,y) .

g.drawstring(logotext, width, height);

g.dispose();

os = new fileoutputstream(targerpath);

// 生成

system.out.println("新增水印文字完成!");

} catch (exception e) finally catch (exception e)

try catch (exception e)

}}

php 檔案上傳校驗 php實現檔案上傳基本驗證

html部分 檔案上傳 php服務端部分 header content type text html charset utf 8 預定義變數 print r files 可以顯示錯誤號,根據錯誤號來定位錯誤資訊 filename files myfile name type files myfile...

JAVA Execl檔案校驗

通過poi魔數判斷檔案型別 public static boolean i eclfile inputstream inputstream catch ioexception e return res 以上是通過流讀取檔案頭的魔數來校驗檔案型別。可避免使用者直接修改其他型別檔案字尾為 xls 或 x...

Json檔案校驗

internal class jsonsplitverify internal static bool isjson string json region 開頭是否問json 開頭是否問json private static bool isjsonstart ref string json s e ...