2014-05-14 118 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逻辑,因此请对此进行测试。