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

时间:2009-05-11 09:35:44

标签: c# asp.net jquery ajax security

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

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

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

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

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

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

在PHP中:

在php中,我的同事通过检查页面的refrer来保护这个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请求。

由于

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

无论你做什么,都不要依赖像'HTTP_REFERER'这样的http标头,因为它们很容易被欺骗。

答案 2 :(得分:2)

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

此外,不要使用顺序产品ID,使用uniqueidentifiers,您仍然可以使用整数产品ID进行显示,但对于您描述的所有其他用途,您将需要使用产品uniqueidentifier / guid。