2016-5-6 12:59:59 | 作者:老鐵SEO | 0個評論 | 人瀏覽
KindEditor編輯器上傳文件是沒有用戶登錄驗證和權限驗證的,即任何人都可以上傳,這樣很不安全,會有文件上傳漏洞。于是,我們就需要加一個權限驗證了。
以下是KindEditor 4.1.11的ASP接口示例:
KindEditor中單個圖片及文件上傳,可以直接在 KindEditor/asp/upload_json.asp 這個文件頂部加入如下代碼:
<% '……省略包含文件及打開數據庫和DB函數的代碼 if len(request.Cookies("username"))>0 and len(request.Cookies("password"))>0 then dim rs Set Rs = DB("Select [password] From [Admin] Where [Username]='" & username & "'",1) If Not Rs.Eof Then if rs(0)<>password then response.End() else response.End() End If : Rs.Close else response.End() end if %>
說明:單個圖片及文件上傳時,upload_json.asp文件可以獲取cookies和session,因此可以直接寫入驗證程序。
然而,KindEditor批量圖片上傳功能,采用的是FLASH方式,FLASH無法直接獲取cookies和session,需要傳值進去才能不丟失cookies和session。
所以,KindEditor上傳文件加入cookies/session權限驗證的最終解決方法如下:
調用KindEditor的頁面中,如:
<link rel="stylesheet" href="kindeditor/themes/default/default.css" /> <script charset="utf-8" src="kindeditor/kindeditor-all.js"></script> <script charset="utf-8" src="kindeditor/lang/zh-CN.js"></script> <script> var KE; KindEditor.ready(function(K) { KE = K.create('#Content',{ uploadJson : 'kindeditor/asp/upload_json.asp?username=<%=request.Cookies("username")%>&password=<%=request.Cookies("password")%>', fileManagerJson : 'kindeditor/asp/file_manager_json.asp', allowImageUpload: true, //多圖上傳 allowFileManager : true, //瀏覽圖片空間 filterMode : false, //HTML特殊代碼過濾 afterBlur: function(){ this.sync(); } //編輯器失去焦點(blur)時執行的回調函數(將編輯器的HTML數據同步到textarea) }); }); </script> <textarea id="Content" name="Content" style=" width: 99%; height: 500px; visibility: hidden; display: block; "></textarea>
KindEditor/asp/upload_json.asp 這個文件中,在頂部加入如下代碼:
<% '……省略包含文件及打開數據庫和DB函數的代碼 dim username,password username=trim(request.QueryString("username")) password=trim(request.QueryString("password")) username=Replace(Replace(Replace(Replace(Replace(Replace(username,"'",""),")",""),">",""),"*",""),"?",""),"%","") password=Replace(Replace(Replace(Replace(Replace(Replace(password,"'",""),")",""),">",""),"*",""),"?",""),"%","") If Len(username)>0 And Len(password)>0 Then dim rs Set Rs = DB("Select [password] From [Admin] Where [Username]='" & username & "'",1) If Not Rs.Eof Then If rs(0)<>password Then response.End() else response.End() End If : Rs.Close else response.End() End If %>