3

我正在尝试“AJAX-ify”我的网站以改善 UI 体验。在性能方面,我也在尝试摆脱 UpdatePanel。我在Encosia上看到了一篇很棒的文章,展示了一种使用 PageMethods 发布的方法。我的问题是,生产环境中的页面方法有多安全?公开后,任何人都可以创建一个 JSON 脚本直接 POST 到服务器,还是进行跨域检查?我的 PageMethods 也会将数据写入数据库(过滤后)。

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

谢谢

4

4 回答 4

3

PageMethods 与它们所在的处理程序一样安全。

FormsAuthentication 将保护除登录页面之外的所有内容。

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

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

于 2010-03-21T01:19:48.647 回答
1

您正在尝试防御CSRF攻击。

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

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

于 2010-03-21T01:15:56.230 回答
1

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

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

我的解决方案非常简单,是我偶然发现的。将静态 Cookie 请求添加到页面方法会为任何不是网站的应用程序返回错误。

 [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": ""}

虽然在 LocalHost 上会显示更详细的错误。

我知道有些浏览器插件可以通过坐在网站旁边来拦截 API 调用。我没有测试过这个。但是,必须为此构建单独的安全修复程序。一旦我执行一些测试,我会在这里更新。

于 2018-04-05T18:15:39.047 回答
0

将 Pagemethods 想象成页面本地的迷你网络服务。事实是,除了放置在整个网站上的检查和验证以及您选择放入的检查和验证之外,他们不会进行额外的检查和验证。

从“封装”的角度来看,使用 Pagemethods 是一个聪明的想法,如果您要使用它们,尝试采取一些额外的安全措施也没有什么坏处。

于 2010-03-21T01:23:18.657 回答