本文介紹在 .NET 環境下,如何輕鬆解決撰寫網站程式碼時的站點安全性問題,附帶大量原始碼供參考!
以前用 ASP、PHP、JSP 撰寫網站程式碼時,站點安全性總是頭痛問題,雖編寫用戶登入、註冊、驗證頁面,但效果總不理想。有時不得不用大量 session 變數存放相關資訊,處處設防。而在 .NET 環境下,此問題處理起來非常容易。關鍵在於充分理解 web.config 檔案。首先介紹 web.config 檔案。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<!-- 動態偵錯編譯
設定 compilation debug="true" 將偵錯符號(.pdb 資訊)
插入編譯頁中。因這將建立執行起來較慢大檔案,所以應只在偵錯時設為 true,其他時候設為 false。更多資訊請參考偵錯 ASP.NET 檔案文件。
-->
<compilation defaultLanguage="vb" debug="true" />
<!-- 自訂錯誤資訊
設定 customErrors mode="On" 或 "RemoteOnly" 啟用自訂錯誤資訊,或設為 "Off" 禁用。
為每個要處理錯誤加入 <error> 標記。
-->
<customErrors mode="RemoteOnly" />
<!-- 身分驗證
此區段設定應用程式身分驗證策略。可能模式為 "Windows"、"Forms"、"Passport" 和 "None"
-->
<authentication mode="Windows" />
<!-- 授權
此區段設定應用程式授權策略。可允許或拒絕用戶或角色存取應用程式資源。萬用字元:"*" 表示任何人,"?" 表示匿名(未授權)用戶。
-->
<authorization>
<allow users="*" /> <!-- 允許所有用戶 -->
<!-- <allow users="[逗號分隔用戶清單]" roles="[逗號分隔角色清單]"/>
<deny users="[逗號分隔用戶清單]" roles="[逗號分隔角色清單]"/>
-->
</authorization>
<!-- 應用程式層級追蹤記錄
應用程式層級追蹤在應用程式內為每頁啟用追蹤日誌輸出。
設定 trace enabled="true" 啟用應用程式追蹤記錄。若 pageOutput="true",追蹤資訊顯示每頁底部。否則可透過從 Web 應用程式根瀏覽 "trace.axd" 頁查看應用程式追蹤日誌。
-->
<trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />
<!-- 會話狀態設定
預設 ASP.NET 使用 cookie 識別哪些請求屬於特定會話。若 cookie 不可用,可透過將會話識別碼加入 URL 追蹤會話。若禁用 cookie,設定 sessionState cookieless="true"。
-->
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;user id=sa;password="
cookieless="false"
timeout="20"
/>
<!-- 全球化
此區段設定應用程式全球化設定。
-->
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
</configuration>
相信看過上述介紹後,對 web.config 非常了解了。下面切入主題。為防止用戶未驗證存取站點,處理方法:用戶未通過驗證點擊任何頁面直接跳到 Login.aspx,程式碼如下:
<authentication mode="Forms">
<forms name="yourAuthCookie" loginUrl="login.aspx" protection="All" path="/" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
但這會產生問題:若站點有資訊可讓任意用戶隨意存取,如站點簡介、使用說明。若按上述處理豈不讓用戶覺得麻煩,呵呵不急,ASP.NET 自然有解決辦法。下列程式碼可實現匿名用戶存取 Test.aspx 頁面:
<location path="test.aspx">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>