我正在开发一个应用程序,我在其中显示网格中的产品。在网格中有一个列具有禁用/启用图标,点击该图标后,我通过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请求。
由于
答案 0 :(得分:4)
忘记使用引用者 - 伪造是微不足道的。没有办法可靠地判断请求是直接发出还是作为对其他内容的响应。
如果您想通过请求URL来阻止未经授权的人员对系统产生影响,那么您需要更智能的东西来确定他们的授权级别(可能是使用HTTP Basic Auth或Cookie实现的密码系统)。
答案 1 :(得分:3)
无论你做什么,都不要依赖像'HTTP_REFERER'这样的http标头,因为它们很容易被欺骗。
答案 2 :(得分:2)
您需要检查您的用户是否已登录您的服务。编写一个好的安全登录系统也不容易,但这是您需要做的,或使用内置的“表单身份验证”。
此外,不要使用顺序产品ID,使用uniqueidentifiers,您仍然可以使用整数产品ID进行显示,但对于您描述的所有其他用途,您将需要使用产品uniqueidentifier / guid。