0

我有以下 ajax 调用

open: function () {
                     $(this).load("MyBox.aspx?sec=L&levId=" + RowId);
                 }

所以人们可以看到查询字符串,所以用户可以复制 url 并将其粘贴到浏览器,但我怎样才能阻止它?我不希望它从浏览器中显示。我怎么能这样做?我正在使用 asp.net 和 jquery。

4

3 回答 3

2

load函数发出GET请求。取而代之的是,您可以使用 jQuery POST调用并获取数据。用户无法通过将结果粘贴到浏览器并按回车(即 GET 请求)来获得结果

  var thatObject=$(this);
  $.post("MyBox.aspx?sec=L&levId=" + RowId,function(response){
     thatObject.html(response);
  })

在服务器页面中,您可以通过检查Request.Form集合(而不是 Request.QueryString)来读取发布的值。

来自msdn

Form 集合使用 POST 方法检索发布到 HTTP 请求正文的表单元素的值。

Request.RequestType您可以通过检查属性值来确定调用是 GET 调用还是 POST 调用。这样,您可以避免人们向此方法发出 GET 请求并获得响应。

但请记住,有一些工具/浏览器插件可以从浏览器发出 POST 请求。

此外,如果数据是针对授权用户的,您可以在返回内容之前在服务器页面(MYbox.aspx)中检查用户是否有权访问它。

于 2012-10-07T00:05:26.453 回答
1

你不能。您永远不能信任客户端上运行的任何代码。如果您需要在客户端隐藏数据,您应该创建一个基于服务器的会话,然后将会话令牌放入加密的 cookie 中。

于 2012-10-07T00:05:14.270 回答
1

来自维基百科和 W3C

某些方法(例如,HEAD、GET、OPTIONS 和 TRACE)被定义为安全的,这意味着它们仅用于信息检索,不应更改服务器的状态。换句话说,它们不应该有副作用,除了相对无害的影响,如日志记录、缓存、横幅广告的服务或增加网络计数器。因此,在不考虑应用程序状态上下文的情况下发出任意 GET 请求应该被认为是安全的。

相比之下,POST、PUT 和 DELETE 等方法旨在用于可能导致副作用的操作

如果您的 get 请求更改了服务器的状态(它很可能根据您的帖子进行更改),那么您做错了。你试图做的事情是不可能的。你需要重新考虑你的架构。

于 2012-10-07T00:11:20.493 回答