Access數據庫安全之——反下載

穩萊

Access數據庫安全之——反下載 

--------------------------------------------------------------------------------
 
    提    交:阿酷
    時    間:2004-8-8
    性    質:非原創
    出    處:E代時光
    瀏    覽:3/331 

--------------------------------------------------------------------------------
 
====================================================================================================
    阿酷:一篇比較不錯的關於Access數據反下載的文章,值得每一位ASP+Access網站站長拜讀!
    阿酷在程序中添加了一點點頁面提示,並有一些個人的心得與大家分享。
====================================================================================================  
    今天再次看到Access數據庫安全的文章,每次看到這種文章就想說上兩句,流行說法有幾種:
一、密碼式
  給數據庫起一個隨機複雜的名稱,避免被猜到被下載,這種方式在以前很流行,因為大家都對自己的代碼很有自信。但隨著錯誤提示對數據庫地址的洩露導致數據庫被非法下載,這種方式也就越來越少人用了。
    阿酷:這種方法,已經很少被用到了,除了對安全不甚瞭解的程序員,雖然少,但是還是會遇到,比如前幾天看到的物業的網站。
二、"#"式
  在數據庫名稱裡加上#號,從URL上請求時#是請求地址和請求參數的一個分隔字符,如果知道了數據庫名,直接請求的話,如:http://www.xx.com/access#.mdb,WEB服務器會認為請求的是access而不是access#.mdb,所以會提示找不到文件,但是很遺憾,URL中對於這些特殊的字符都會有一個特殊的表示方式,#的特殊表示就是%23,如http://www.xx.com/access%23.mdb,那麼access#.mdb將會被下載。還有如果用FlashGet之類的下載工具也可以直接下載。
====================================================================================================
    阿酷:這種方法感覺有點類似於掩耳盜鈴,因為通過下載工具,可以很方便的下載,沒有什麼實際意義,除了對付剛接觸的人。
====================================================================================================
三、ASP式
  這種作法是比較專業但也是很安全的也是現在比較流行的作法,但是現在許多的人只是作了一半,只是將數據名改成ASP而以,這樣的話直接用FlashGet之類的下載工具一樣可以將數據庫下載,這種方式的正確作法有兩步:
  第一步:在數據庫內創建一個字段,名稱隨意,類型是OLE對象,內容設置為單字節型的"<%",即(ASP代碼chrB(asc("<")) & chrB(asc("%"))的運行結果)
  第二步:將數據庫改名為ASP
  這樣從URL上直接請求這個數據庫將會提示"缺少關閉腳本分隔符",從而拒絕下載,因為這個方式比較麻煩我在網上找了一段小代碼來完成OLE對象的插入工作,只要將數據庫名設置好,然後放在和數據庫內一目錄運行一下就可以了。
  代碼全文數下:
<%
db="d.mdb" '這裡改成您的數據庫地址
set conn=server.createobject("Adodb.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db)
conn.open connstr
conn.execute("create table notdownload(notdown oleobject)")
'提示表及字段創建成功
response.write "表、字段創建成功!"
set rs=server.createobject("adodb.recordset")
sql="select * from notdownload"
rs.open sql,conn,1,3
rs.addnew
rs("notdown").appendchunk(chrB(asc("<")) & chrB(asc("%")))
rs.update
rs.close
'提示內容添加成功
response.write "內容添加完成!"
set rs=nothing
conn.close
set conn=nothing
%>
  這段代碼運行完之後將會在數據庫內生成一個nodownload表,表內字段是notdown。如果數據庫內已有同名的數據表存在請將代碼內的nodownload改成自己想要的數據表名即可。
====================================================================================================
    阿酷:這種方法用的比較普遍,正如作者所說,大多數人只是將mdb後綴改稱了asp,實際上如果知道路徑,用flashget一樣可以下載。
    作者提供的asp源代碼,可以直接創建表和字段,並添加內容。大家可以保存為.asp文件,在瀏覽器執行一次即可。
    當然也可以直接編輯數據庫:
    1、打開access數據庫
    2、使用設計創建表,添加字段notdown,類型使用「OLE對像」
    3、保存為nodownload,不創建主鍵。
    4、打開記事本,編輯文件nodownload.txt,內容為「<%」。
    5、打開nodownload表,點擊右鍵-->插入對象,選擇從文件插入,定位到nodownload.txt,確認。
    以上都需要在數據庫創建一個表,大家可以把這個表留著不管,也可以直接刪除,同樣可以起到反下載的功能,即:執行後再刪除。關於這一點,大家可以試試。
====================================================================================================
四、asa式
  這種方式的真諦是利用IIS對ASA文件的保護,從而使得數據庫文件不能從URL上直接請求下載,但是這種方式被誤解成只要將文件後綴改成ASA就可以了。要知道IIS只是對global.asa這個文件名有請求保護,所以這種方式只能將數據庫名設置為global.asa,而且要注意的是,設置成global.asa之後最好不要將其放在主機或虛擬目錄的根目錄裡,不然會被IIS當然正常的global.asa文件進行嘗試運行的。
====================================================================================================
    阿酷:這種方法也比較不錯的,但是如果網站已經使用了global.asa,有時候容易混淆,大家根據情況看吧。
====================================================================================================
    感覺第三第四種是比較安全的,除非IIS有查看ASP或ASA源碼的漏洞,否則是無法將數據庫下載的。
 

 給當前日誌評分:
Loading Vote
正在讀取評分資料...


文章來自: Tank部落格
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相關日誌:

評論: 0 | 引用: 0 | 查看次數: -
發表評論
暱 稱:
密 碼: 遊客發言不需要密碼.
內 容:
驗證碼: 驗證碼
選 項:
雖然發表評論不用註冊,但是為了保護您的發言權,建議您註冊帳號.