代码之家  ›  专栏  ›  技术社区  ›  keyboardP

页面方法安全性

  •  2
  • keyboardP  · 技术社区  · 15 年前

    我正在尝试“Ajax化”我的站点,以改善用户界面体验。在性能方面,我也在尝试摆脱updatepanel。我在网上看到一篇很好的文章 Encosia 显示使用pagemethods的发布方式。我的问题是,页面方法在生产环境中的安全性如何?作为公共的,是否可以创建一个JSON脚本直接发布到服务器,或者是否进行了跨域检查?我的pagemethods也会将数据写入数据库(过滤后)。

    我正在页面中使用表单身份验证,在页面加载时,它会将未经身份验证的用户重定向到登录页面。如果用户直接发布到该方法,那么该页上的页方法是否还需要检查身份验证,或者该身份验证是为整个页继承的?(本质上,即使用户设法只向pagemethod发布,整个页面周期是否都会发生)?

    谢谢

    4 回复  |  直到 6 年前
        1
  •  3
  •   Sky Sanders    15 年前

    pageMethods和它们所在的处理程序一样安全。

    表单验证将保护除登录页之外的所有内容。

    在未受保护的处理程序(如登录)上,您应该只公开1)不敏感或2)验证用户的方法。

    编辑:针对有关CSRF和XSS的评论和其他答案,请参见 http://weblogs.asp.net/scottgu/archive/2007/04/04/json-hijacking-and-how-asp-net-ajax-1-0-mitigates-these-attacks.aspx

        2
  •  1
  •   SLaks    15 年前

    你想保护自己 CSRF 攻击。

    通过在post参数中要求授权代码,并在初始页面加载中提供授权代码,可以防止这些攻击。(身份验证代码应该是每个IP地址和每个用户的,并且应该很快过期)

    为了增加安全性,您可以使每个认证代码只可用一次,并让每个请求返回一个新的认证代码。(但是,如果任何请求失败,则需要重新加载页面)

        3
  •  0
  •   Cyril Gupta    15 年前

    把pagemethods想象成一个页面本地的小型WebServe。事实上,除了那些放在整个网站上的,以及那些你选择放进去的,他们不会有额外的检查和验证。

    从“封装”的角度来看,使用pagemethods是一个很明智的想法,如果您打算使用它们,那么在适当的地方添加一些额外的安全措施也不会有什么影响。

        4
  •  0
  •   Olorunfemi Davis    6 年前

    我正在开发一个大量使用ASP.NET WebForms页面方法的项目,我使用Ajax与之交谈。这对我来说非常方便,而不是用JavaScript编写所有代码。

    然而,保护页面方法成为一个困扰我的问题。我看到我可以通过邮递员和小提琴手访问页面方法,从而使黑客能够使用您的API。

    我的解决方案很简单,我是偶然发现的。将静态cookie请求添加到page方法对于任何不是网站的应用程序都会返回错误。

     [WebMethod]
    [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
    public static string GetAnything(object dat)
    {
        HttpCookie myguid = HttpContext.Current.Request.Cookies.Get(Constants.Session.PreventHacking);
        var hackguid = myguid.Value ?? ""; //other page method contents
        return "anything";
    }
    

    对此方法的邮差请求将返回:

    {
    "Message": "There was an error processing the request.",
    "StackTrace": "",
    "ExceptionType": ""}
    

    而在本地主机上会显示一个更详细的错误if。

    我知道有一些浏览器广告可以通过坐在网站旁边拦截API调用。我还没有测试过这个。但是,必须为此建立单独的安全修复程序。 执行一些测试后,我将在此处更新。

    推荐文章