2014-05-14 116 views
2

我知道有很多類似的問題,但我有超過1,我真的很喜歡答案和問題的具體建議請。JSON和網絡服務安全

我創建了一個ASP.NET應用程序,它通過Web服務訪問(讀取和寫入)SQL Server數據庫。

我使用JSON調用webservice來填充Javascript圖表/圖表。

由於應用程序的要求,我使用ALOT的JSON。

問題:

  1. 我使用窗體身份驗證,因此是我說錯只有成功登錄的用戶將永遠能夠查看網頁源?
  2. 如果是,那麼登錄的用戶將能夠看到我的服務路徑,並可以輕鬆訪問特權信息,我想爲每個[WebMethod]添加一個參數(用戶名)來驗證請求,這是否是一個好想法?
  3. 只有服務上的圖表/圖表方法以及我的其他需求直接從Web應用程序訪問數據庫(後面的C#代碼)纔是明智的做法。

如果問題很愚蠢或不清楚,我會提前道歉,但我真的不想花太多時間來創建一個具有巨大安全漏洞的應用程序。

預先感謝任何建議/幫助或鏈接

+0

當您在代碼中使用ajax時,您應該假定服務的路徑對每個人都是公共的。因此,您需要在WebService中提供一些安全性。 –

回答

0

我會避免在Ajax請求傳遞用戶名和/或密碼,特別是如果不通過SSL安全。使用Forms Authentication提供的身份驗證Cookie,並在服務器端檢查它們。

我用過的一個快捷方式是創建一個空的.aspx頁面來接收ajax請求。如果有的話,一定要忽略母版頁。該頁面沒有標記,但可以讀取Page_Load中的請求變量,用戶信息,會話變量等。然後Response.Write所需的JSON輸出。事情是這樣的:

MySearch.aspx.cs

protected void Page_Load(object sender, EventArgs e) 
    { 
     // Check if user is logged in, and return JSON result of search 
     if (User.Identity.IsAuthenticated) 
     { 
      string json = MySearch(Request["Search"], Session["Language"]); 
      Response.Clear(); 
      Response.ContentType = "application/json; charset=utf-8"; 
      Response.Write(json); 
      Response.End(); 
     } 
    } 

這樣你不必暴露整個Web服務接口給公衆。在返回JSON之前,您有一個簡單的方法來「檢查」用戶。

如果您有未經身份驗證的請求重定向到登錄頁面,則可能需要將此頁面留給未經身份驗證的用戶,因此,請在代碼中籤入IsAuthenticated。未經驗證的用戶將只會得到一個空的html頁面,這可能會破壞javascript邏輯,因此請對此進行測試。