如何保护Jquery和asp.net页面方法调用

时间:2011-08-12 06:40:37

标签: jquery asp.net

我调用我的asp.net页面方法,如下面的代码

 $.ajax({
        type: "POST",
        url: "MyPage.aspx/GetItems",
        data: "{'ID':'1', 'Name':'Keith'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
           // my success code
        }
    });

以上方式我使用jquery调用我的asp.net pagemethod。所以,如果有人看到页面源,那么他可以看到我正在调用的页面以及我传递的值。所以任何人都可以以同样的方式调用我的页面并获取数据。

所以这里我需要合并一些我将在运行时生成的tokenid,并将传递给服务器端函数。在这种情况下,用户可以再次看到tokenid但是如果他复制了我的tokenid,那么该tokenid对他不起作用。所以我只需要逻辑来生成动态tokenid,它只能在我的网络应用程序中有效。

请分享逻辑。

3 个答案:

答案 0 :(得分:1)

我这样做:

  1. 服务器端:创建存储Dictonary<'tokenid','context'>
  2. 的会话变量
  3. 客户端:仅使用tokenid
  4. TokenId通过Guid.NewGuid或RNGCryptoServiceProvider生成。
    上下文 - 是一些与令牌相关联的数据(在您的情况下是'ID')。

    由此

    • 我们永远不会向客户端发送真实的ID
    • tokenid是随机性且不可重复的
    • 用户无法访问常规数据

答案 1 :(得分:0)

如果你的意思是,没有人可以在他们的网站上使用ajax来访问你的数据。 跨域策略不允许浏览器通过ajax访问其他网站。 这还不够,或者你有一个完全不同的问题?

答案 2 :(得分:0)

很抱歉发布,因为我没有足够的声誉来发表评论。但之前关于跨域策略的讨论阻止了某人进行ajax调用来访问您的数据。 如果你安装一个名为firequery的简单firefox附加组件。您可以从页面的任何位置添加javascript / jquery调用并直接运行它们。 (浏览器的DOM和任何客户端总是可以被浏览器操纵)

因此,例如,我可以了解一个url并构建jquery ajax调用并将其直接放入firequery中,它将作为未经身份验证的用户立即执行,但在站点域内。我在我的公司产品中利用了这个问题。

您不能假设跨域政策会保护您。