對于我們的示例,我們采用一個有效且強大的兩層模型:Web 服務器托管用戶界面和組件,數據庫服務器托管 SQL Server 數據存儲。如果通信量非常大,這個模型使我們可以靈活地在簇中添加更多的服務器,并使其保持足夠的簡潔以便于處理。下面的圖像顯示了此物理體系結構與前面定義的邏輯體系結構之間的映射關系。
圖 2:物理體系結構與三層體系結構之間的映射關系
正如您看到的那樣,邏輯體系結構和物理體系結構不必相同。在規劃階段還要考慮一項內容:安全。
安全規劃
Microsoft 有一個關于安全性與軟件這一主題的歌訣:“Secure by design, secure by default, and secure by deployment(設計安全,默認安全和部署安全)”。即,在安全中設計,期待系統在默認情況下是安全的,以及創建可以在安全環境中成功部署的解決方案。安全始終是重要的。既然越來越多的軟件要在公用的 Internet 上“生存”,編寫安全的軟件就更加關鍵。對于我們而言,幸運的是,.NET 運行時和 Windows 操作系統提供廣泛的安全選項和功能,我們可以輕松地將其包含在我們的應用程序中。無需過分注重標識和消除聯機解決方案中安全漏洞的細節,我們可以指出其中一些最常見的漏洞并指出我們的應用程序規劃如何進行處理。
注意:有關可用選項的詳細信息,請參閱 Microsoft Security Developer Center。
緩沖區溢出
這可能是已編譯應用程序中最常見的安全漏洞。由于我們將使用 .NET 運行時,而它是設計用來在內存中安全運行的,因此不太可能發生緩沖區溢出。此外,我們使用 Microsoft Visual Basic? .NET 對解決方案進行編碼,而 Microsoft Visual Basic? .NET 不像 C 或 C++ 那樣容易受到緩沖區溢出問題的影響。但是,即使我們打算用 C++ 創建組件,我們還可以使用編譯程序的特殊功能,GS 轉換,來保護我們免受大多數緩沖區溢出的攻擊。
數據庫攻擊
另一種常見的安全漏洞可能會使惡意用戶獲得訪問存儲在數據庫中的原始數據的權限。為了防止黑客獲得數據的控制權,我們僅使用 SQL Server 存儲過程,而不使用“內聯查詢”。這樣可以大大減少試圖在輸入流中插入其他 SQL 命令的攻擊。我們還在程序中多個位置處使用輸入驗證,以確保所有輸入僅包含有效的字符。
交叉站點腳本攻擊
對 Web 應用程序進行的常見攻擊還有一種,它涉及到用戶在輸入流中添加客戶方腳本,這類攻擊將執行附加的對話并誘騙用戶將個人數據發送到黑客自己的 Web 站點。要解決這個問題,我們使用 ASP.NET 1.1 的一個新功能,過濾出這種惡意代碼的所有輸入,防止將它置入系統中。顯示屏幕上還包含附加代碼,它將自動禁用任何腳本或顯示可能會插入到數據存儲中的標記。