2016-07-21 92 views
1

我現在正在學習ASP.NET核心開發的概念,並且在學習期間,我從以下article中發現了一個網頁需要防止未經授權的訪問,以防止從跨站請求僞造攻擊。防止跨站點請求僞造攻擊

我已經跟着幾個教程和我自己(學習)的應用程序,我有:

  • 實現我的控制器的頂部[Authorize]裝飾(對我來說這是API控制器)
  • 在實際POSTUPDATE方法我已經實現if (ModelState.IsValid)調用來檢查,如果有必要的參數都已經過去了
  • 二手的ViewModels而不是在數據庫與網站(或API在這種情況下)通信時所使用的實際模型。

我有以下三個問題:

1)是這種方法足以爲了保護我的網站?作爲一種身份驗證方法,我使用簡單的CookieAuthentification。或換句話說(因爲這可能是太廣泛的問題),這種方法在正確的軌道上讓人感到沮喪嗎?

2)在我目前的設置(使用ViewModels而不是真實模型)是[ValidateAntiForgeryToken]必要?如果是,它的用途是什麼?

3)現在問題(我最感興趣的是)關於ViewModels。 ViewModels如何保護我的網站免受未經授權的攻擊?我明白,在我的ViewModel中,我只能公開我希望用戶有權訪問的變量/屬性(並隱藏其餘部分),但是如何保護我的網站,當我仍然需要公開我的ID(主鍵)時因爲沒有ID我無法想象如何做,如DELETE/UPDATE調用)?

在這個問題上的任何幫助將不勝感激,因爲我仍然在學習這個主題。

回答

1

網站安全是一個複雜的問題。應實施與需要保護的數據的敏感性相稱的保護措施。

1)某些級別的身份驗證對於防止匿名攻擊是必要的,攻擊者可以通過無限次嘗試獲得成功的攻擊。

2)任何數據更改都需要[ValidateAntiForgeryToken]。沒有它,你可能會有一個用戶誰已成功通過身份驗證,並被給予一個有效的cookie,然後由一個惡意的惡意攻擊者盜用您的有效用戶使用的瀏覽器,並使用該被盜的cookie進行不必要的數據更改。

3)使用ViewModels意味着你沒有向數據庫公開直接的數據調用。是的,惡意行爲者可以用不希望的方式修改數據,但仍然侷限於數據層範圍內的更改。如果沒有ViewModels,攻擊者可能會通過SQL注入進行您從未打算過的更改。如果您使用的是實體框架等ORM,那麼SQL注入的可能性就不大可能。

相關問題