2011-03-27 79 views
4

我已经读过 Securing AJAX Requests via GUIDSecuring an ajax request 。现在让我解释一下我的场景,下面的代码片段可能有助于解释主题。保护通过身份验证的Web表单Ajax的请求在ASP.net

[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是接受标题名称的文本框。验证器在页面上创建验证文本框too.CreateTitle是一个网页的方法我称之为使用的ScriptManager

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

功能成功表明,标题被创建并显示与加密记录ID作为查询字符串的链接咆哮消息到网址查看创建标题的详细信息。

现在亟待解决的问题,

  1. 这是足够安全?我错过了什么?
  2. 我如何使过程更安全,更快?
+0

什么是加密记录ID给你?你吃盐了吗?是否阻止用户猜测他们无法访问的其他ID?加密它不会有太大的帮助。不知道你的身份验证客户如何,这很难说。基于Cookie的身份验证通常足够安全,您可以始终通过ssl运行它。 – 2011-05-19 10:27:42

+0

@Simon是的,我盐的记录标识,同时在运行交易时,我确保该人正在更新他创建/访问的记录。 – Deeptechtons 2011-05-19 10:29:34

+0

安全的哪些方面让您担心 - 您想要解决什么问题? – Xhalent 2011-06-03 23:18:40

回答

3

虽然是微不足道的限制,以验证和授权用户的任何方法,当你暴露分贝ID的查询字符串你打开一个身份验证和授权的用户可以寻求他们有啥不访问记录的可能性。当数据库ID是整数或其他容易猜到的标识符时尤其如此。尽管不是绝对的,但使用Guid作为db ids可能会降低风险。

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

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

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

顺便说一句:任何HTTP请求验证潜在的危险输入。

希望这会有所帮助,

+0

这是比预期更有希望的答案。所以我将不得不为安全性编程更多。加密也不是很可靠,我感觉。谢谢 – Deeptechtons 2011-06-05 16:54:05

+0

这显然是你正在寻找的答案。我删除了我的答案,因为它更多的是实施建议,而不是一个很好的解释。您可以使用IPrincipalPermission属性来请求某些角色,并且可以使用它来处理自定义角色。 – Ernesto 2011-06-06 13:51:47