5

我已经阅读了 Securing AJAX Requests via GUIDSecuring an ajax request 。现在让我解释一下我的场景,下面是可能有助于解释主题的代码片段。

[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 是我使用 scriptmanager 调用的页面方法

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

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

现在最迫切的问题,

  1. 这足够安全吗?我错过了什么?
  2. 我怎样才能使这个过程更安全、更快?
4

1 回答 1

4

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

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

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

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

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

希望这可以帮助,

于 2011-06-04T08:24:28.113 回答