Cache Manager 快取總管-管理 Web 網站快取物件的好幫手
- 2011-03-05
- 16566
- 0
- 版本
- 1.0.60115.01
大家都知道在開發網頁的時候因為 Server 的數量遠不及 Client 所以經常會使用到 Cache 技巧,不管是 OutCache 或是 RunTime Cache 都是降低 Server 負載的好方式,但是你有沒有想過到底 Cache 放對東西了嗎?或是放了太多一樣的東西,如果快取用的不好不但沒有幫助到效能反而可能拖累整個 Server ,因此 demo 要推薦一個早在 2006 年就推出的好東西,它可以讓我們方便快速的看到快取的狀態和內容進而調整快取的數量與值。
首先就是到官網下載後參考到你的專案內(記得要選取複製到本機)
然後開啟專案的 Web.Config 把 CacheManager 註冊進去
IIS 6 註冊法(官方範例不建議使用,請參考本文最後說明)
<add verb="*" path="CacheManager.axd" type="AspAlliance.CacheManager.CacheManagerPageFactory,AspAlliance.CacheManager" />
IIS 7 註冊法(官方範例不建議使用,請參考本文最後說明)
<add verb="*" path="CacheManager.axd" type="AspAlliance.CacheManager.CacheManagerPageFactory,AspAlliance.CacheManager" />
這樣子就可以直接連到 http://localhost/CacheManager.axd 使用,首頁就長這樣
你可以在這頁看到伺服器還剩下多少記憶體和你已經使用了幾個快取物件(RunTime Cache)
當你按下了【Clear Application Cache】就會將伺服器上所有的快取刪除(RunTime Cache)
當您按下了【View Cache Entries】可以查看快取物件的型態,如果該物件是可以序列化還可以看到內容值
最後一個選項是【Remove Page Output Cache】按下去後輸入網址就可以清除 Output Cache
看了以上的功能你一定也覺得這個 Cache Manager 相當實用,但你也可能發現了一件事情,任何人都可以進到這工具頁面,這是相當不安全的雖然他只能清快取,但如果開發人員不小心將敏感資訊存放在快取物件中那就問題大了,所以我們必須要增加一下它的安全性,官網有個最簡單也還滿有效的解決方案,那就是改檔名....你可以將預設檔名改掉這樣別人就不好猜,猜不到也就進不來了.....。
當然你可以使用更正統更安全的作法設定location區塊,你可以限制有登入的才可以看(官方範例不建議使用,請參考本文最後說明)
<location path="CacheManager.axd"> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </location>
或是更進階一點設定只有最高管理者角色的使用者才可以看(官方範例不建議使用,請參考本文最後說明)
<location path="CacheManager.axd"> <system.web> <authorization> <allow roles="Admin" /> <deny users="*" /> </authorization> </system.web> </location>
快取雖然好用但是也要適量使用,不要一谷腦的全丟進去,不然就會發生下面這種情況...
因在 ASP.NET MVC 預設的 Route 規則下會讓上方的安全設定破功,如果您已經設定好了可以嘗試使用 http://server/d/d/d/CacheManager.axd 這種三層肉的網址依然是會很帥的進入到你不想被看到的頁面,因此需要調整設定,調整有幾個步驟請依序執行
將您依據上方所增加的 httpHandlers 都移除(包含 IIS6 或 IIS7 的區塊)
IIS 6 移除這條
<add verb="*" path="CacheManager.axd" type="AspAlliance.CacheManager.CacheManagerPageFactory,AspAlliance.CacheManager" />
IIS 7 移除這條
<add verb="*" path="CacheManager.axd" type="AspAlliance.CacheManager.CacheManagerPageFactory,AspAlliance.CacheManager" />
利用上方所介紹的 location 設定將設定改為如下
<location path="CacheManager.axd"> <system.webServer> <handlers> <add name="CacheManager" verb="*" path="CacheManager.axd" type="AspAlliance.CacheManager.CacheManagerPageFactory,AspAlliance.CacheManager" /> </handlers> </system.webServer> <system.web> <httpHandlers> <add path="CacheManager.axd" verb="*" type="AspAlliance.CacheManager.CacheManagerPageFactory,AspAlliance.CacheManager" /> </httpHandlers> <authorization> <allow users="Admin" /> <deny users="*" /> </authorization> </system.web> </location>
調整成這樣以後路徑就被限制到 http://server/CacheManager.axd 才會註冊進入 httpHandlers 因此就避免掉三層肉的攻擊法,並且一樣有使用 authorization 來限制可以訪問的使用者,因此這樣的設定會有更高的安全性,當然建議您依然是要改名稱 CacheManager 是預設名稱,改掉是比較好的。
回應討論