如何保护 ASP.NET 中的 AJAX 请求?

Posted

技术标签:

【中文标题】如何保护 ASP.NET 中的 AJAX 请求?【英文标题】:How to secure AJAX request in ASP.NET? 【发布时间】:2010-10-25 05:53:51 【问题描述】:

我正在开发一个在网格中显示产品的应用程序。在网格中有一个带有禁用/启用图标的列,单击该图标时,我通过 AJAX 向我的页面 manageProduct.aspx 发出请求,以启用/禁用该特定产品。

在我的 ajax 请求中,我将 productID 作为参数传递,因此最终的 ajax 查询为

http://example.com/manageProduct.aspx?id=234

现在,如果某人(专业黑客或 Web 开发人员)可以获取此 URL(很容易从我的 javascript 文件中获取),那么他可以编写一个脚本,该脚本将作为循环运行并禁用我的所有产品。

所以,我想知道是否有任何机制、技术或方法使用,如果有人试图直接执行该页面,它将返回一个错误(正确的消息“你没有被授权或其他什么”)如果该页面是从所需页面执行的,例如我显示产品列表的位置,那么它将正确执行。

基本上我想保护我的 AJAX 请求,所以没有人可以直接执行它们。

在 PHP 中:

php 中,我的同事通过检查页面的引用来保护这个 PHP 页面。如下:

$back_link = $_SERVER['HTTP_REFERER'];

if ($back_link =='')

   echo 'You are not authorized to execute this page';

else

  //coding

请告诉我如何在 ASP.NET (C#) 中使用相同或任何其他不同但安全的技术,我在我的应用程序中使用 jQUERY 来发出 ajax 请求。

谢谢

【问题讨论】:

如何验证应用程序本身的用户?您应该能够对 ajax 调用使用相同的技术。 我正在通过“用户名”和“密码”对我的用户进行身份验证。但是我在成功登录后将用户名存储为会话变量。万一任何用户在我的网站上尝试了任何攻击呢?? 【参考方案1】:

忘记使用引用 - 伪造是微不足道的。没有办法可靠地判断一个请求是直接发出的还是作为对其他东西的响应。

如果您想阻止未经授权的人通过请求 URL 对系统产生影响,那么您需要更智能的东西来确定他们的授权级别(可能是使用 HTTP Basic Auth 或 Cookie 实现的密码系统)。

【讨论】:

我不是 ASP.NET 高手,我是初学者,请解释一下我们可以使用哪些方法来保护我的 ajax 请求以及如何保护? 技术与任何其他类型的请求完全相同。例如用户名、密码、会话。【参考方案2】:

无论您做什么,都不要依赖诸如“HTTP_REFERER”之类的 http 标头,因为它们很容易被欺骗。

【讨论】:

【参考方案3】:

您需要在您的服务中检查您的用户是否已登录。编写一个好的安全登录系统也并非易事,但这是您需要做的,或者使用内置的“表单身份验证”。

此外,不要使用连续的产品 ID,使用唯一标识符,您仍然可以使用整数产品 ID 进行显示,但对于您描述的所有其他用途,您将希望使用产品唯一标识符/guid。

【讨论】:

以上是关于如何保护 ASP.NET 中的 AJAX 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET MVC 中进行长轮询 AJAX 请求? [复制]

ASP.NET 如何在应用程序请求模块中访问 User.Identity.IsAuthenticated?

为啥我的 ASP.NET MVC 站点中的此 AJAX 请求会触发预检检查?

jQuery+ASP.NET MVC基于CORS实现带cookie的跨域ajax请求

asp net core 5中的Ajax错误请求400

与 ASP.net MVC 中 Ajax 请求中的错误处理有关的疑问