【问题标题】:Securing Ajax Requests in ASP.net via Authenticated Webforms通过经过身份验证的 Web 表单保护 ASP.net 中的 Ajax 请求
【发布时间】:2011-07-23 21:03:47
【问题描述】:

我已经读过了 Securing AJAX Requests via GUID 和 Securing an ajax request .现在让我解释一下我的场景,下面是代码 sn-p 可能有助于解释主题。

[WebMethod[EnableSession = True]
[ScriptMethod]

    public static string CreateTitle(string strTitleName)
    {
    string strResult = "Custom jSon string";
    if(Session["Authorized"] == "True" && !String.IsNullOrEmpty(strTitleName))
    {
         String strTitle = Server.HtmlEncode(strTitleName);
         InsertRecordInDB(strTitle);
         strResult = "Custom jSOn string" + EncryptMD5("record id");
    }
           return strResult;
    }

以下是用于发送参数的 javascript 调用。 btnCreateTitle_click 是按钮客户端的点击事件。 txtTitle 是接受标题名称的文本框。验证器也在页面上创建以验证文本框。CreateTitle 是我使用脚本管理器调用的页面方法

function btnCreateTitle_Click(evnt){
if(Page.ClientValidate()){
if($get("txtTitle")){
PageMethods.CreateTitle($get("txtTitle").value,success,failure,context);
}}}

函数成功显示标题已创建的咆哮消息,并显示带有加密记录ID的链接作为查询字符串到URL以查看创建标题的详细信息。

现在是迫切的问题,

  1. 这足够安全吗?我错过了什么?
  2. 如何让流程更安全、更快速?

【问题讨论】:

  • 加密记录 id 会给您带来什么?你给它加盐吗?是为了阻止用户猜测他们无权访问的其他 id 吗?加密它不会有太大帮助。在不知道您如何验证客户的情况下,很难说。基于 Cookie 的身份验证通常足够安全,您始终可以通过 ssl 运行它。
  • @Simon 是的,我对记录 ID 进行了加盐处理,并且在运行事务时,我确保此人正在更新他创建/访问的记录。
  • 安全的哪些方面让您担心 - 您要解决什么问题?
  • @Xhalent 好吧,我将数据库记录 ID 公开为纯加密文本,有人可以使用此记录 ID 发送欺骗数据(或者我弄错了)。但基本上只有经过身份验证的成员才能访问页面[表单验证]。 webservice 会像 webform 一样检查 potentially dangerous input 吗?有更多问题,但希望首先回答这些问题

标签: asp.net security asp.net-ajax webforms nonce


【解决方案1】:

虽然将任何方法限制为经过身份验证和授权的用户是微不足道的,但当您在查询字符串中公开 db id 时,您确实打开了经过身份验证和授权的用户可能会寻求访问他们不知道的记录的可能性。当 db id 是整数或其他一些容易猜到的标识符时尤其如此。使用 Guid 作为 db id 可能会降低这种风险,但不是绝对的。

您始终需要记住的是不要相信输入。通过默默无闻的安全性(即加密等)不是一种可靠的技术。您的服务应始终验证当前用户是否被允许检索他们请求的记录。有时这称为行级安全性。这只能以编程方式完成。

例如,您需要验证他们是否有权访问他们请求的记录,而不是仅确定某人有权查看记录。

这意味着您需要某种方式将记录与经过身份验证的用户关联起来。

顺便说一句:任何 HTTP 请求都经过验证是否存在潜在危险输入。

希望这会有所帮助,

【讨论】:

  • 这个答案比预期的更有希望。因此,我将不得不为安全性进行更多编程。我觉得加密也不是那么可靠。谢谢
  • 这显然是您正在寻找的答案。我删除了我的答案,因为它更多的是实施建议,而不是一个很好的解释。您确实可以使用 IPrincipalPermission 属性要求某些角色,并进行一些工作以使其与自定义角色一起使用。
猜你喜欢
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多