【问题标题】:JSON and web service safetyJSON 和 Web 服务安全
【发布时间】:2014-07-02 15:26:47
【问题描述】:

我知道有很多与此类似的问题,但我有不止 1 个,我真的很想得到答案和具体问题的建议。

我创建了一个 ASP.NET 应用程序,它通过 Web 服务访问(读取和写入)SQL Server 数据库。

我使用 JSON 调用网络服务来填充 Javascript 图形/图表。

由于应用程序的要求,我使用了很多 JSON。

问题:

  1. 我使用表单身份验证,所以我是否正确地说只有成功登录的用户才能查看网页源?
  2. 如果是,那么登录用户将能够看到我的服务路径并可以轻松访问特权信息,我曾想过在每个 [WebMethod] 中添加一个参数(用户名)来验证请求,这样会不会好想法?
  3. 仅在服务上使用图形/图表方法并且我的其余要求直接从 Web 应用程序访问数据库是否明智(背后的 C# 代码)。

如果问题很愚蠢或不清楚,我提前道歉,但我真的不想花太多时间创建一个存在大量安全漏洞的应用程序。

提前感谢任何建议/帮助或链接

【问题讨论】:

  • 在代码中使用 ajax 时,应该假设服务的路径对所有人都是公开的。因此,您需要在 WebService 中提供一些安全性。

标签: c# asp.net json web-services


【解决方案1】:

我会避免在 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 逻辑,因此请对此进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    相关资源
    最近更新 更多