【问题标题】:Pass parameter to Ajax safe way将参数传递给 Ajax 安全方式
【发布时间】:2016-09-11 01:46:02
【问题描述】:

我想将 id 传递给控制器​​(ASP.NET MVC 5)并从控制器获取结果。我有以下代码:

function LoadBook(id) {
    $.ajax({
        url: '/Book/GetBookById' + id,
        type: 'get',
        dataType: 'json',
        success: function (data) {

        },
        error: function (err) {
            alert("Error: " + err.responseText);
        }
    })
}

url: '/Book/GetBookById' + id 是否安全?如果它不安全,有没有办法做到这一点?

【问题讨论】:

  • 您需要对参数进行 URL 编码。
  • 如果您正在寻找一种 RESTful 方式来执行此操作,您的 URL 应该类似于 /Book/[id]/Book/GetBookById/[id](第二种方式对我来说似乎是多余的)。非 RESTful 你可以做 /Book/GetBookById?id=[id]。也就是说,VS 工具可以自动为您搭建这个框架。

标签: javascript c# asp.net-mvc-5


【解决方案1】:

规定的方法是:

public JsonResult GetBookById(int id)
{
   // do your getting here
   var yourdata = MyDataAccessClass.getBookById(id);
   return new Json(yourdata, JsonRequestBehavior.AllowGet);
}

您的 AJAX 网址将是:

function LoadBook(id) {
$.ajax({
    url: '/Book/GetBookById/' + id,
    type: 'get',
    dataType: 'json',
    success: function (data) {

    },
    error: function (err) {
        alert("Error: " + err.responseText);
    }
})
}

这是在 Microsoft 的 MVC 中进行调用的“安全”和标准方式。

【讨论】:

  • 你还是需要转义参数。
  • 仅当它不是整数时。在我的示例中是这样,因此不需要转义。当然,不清楚 OP 代码中的数据类型是什么。 :-)
  • @richb01:仅仅因为参数声明为整数并不意味着JS中的id总是整数。它可能有一个查询字符串或../some other action 并用于攻击事物。
  • @UçanKartal:了解 URL 编码。
  • @richb01: 不会。如果id1?secretParam=blah../DeleteBook/24,则不会抛出错误。
【解决方案2】:

你需要使用

 encodeURIComponent(Id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多