2011-04-28 75 views
0

我一直在寻找一种方法来解决这个问题,但没有成功,我想也许这里有人可以帮忙吗? 我想在我的.Js文件中使用一个秘密密码,但是我不能直接在文件中写入它,因为每个人都可以在访问源代码时看到它。例如,我需要使用ajax将此密码发送到另一个页面,以确保HttpRequest来自我的网站而不是另一个伪造的httprequest。
这是可能的,因为我已经尝试了其他所有认证表单,但没有帮助。
我使用asp.net和HttpHandler作为返回数据的页面。防止伪造HttpRequests

+0

大多数主要平台都包含某种本地防伪令牌。如果我们知道您使用的是什么Web框架,这将有所帮助。 – 2011-04-28 20:50:45

+0

ASP.NET 3.5是你的意思吗? – 2011-04-28 20:52:19

回答

0

你可以做的是生成密钥使用PHP等,从而有效达到设定时间:

$password = "some random string"; 
$key = md5($password . $_SERVER['REQUEST_TIME']) . "|" . $_SERVER['REQUEST_TIME']; 

你知道什么时候被生成的密钥通过这种方式,如果它被篡改的原因是:

function check($key) { 
    list($hash, $timestamp) = explode("|", $key, 2); 
    if ($hash !== md5($password . $key)) { 
     throw new Exception("Naughty!"); 
    } 
    if ($timestamp < $_SERVER['REQUEST_TIME'] < 60*60) { 
     throw new Exception("too old"); 
    } 
} 

不好的一面是不经常刷新页面的人(在我的例子中是1小时)他们的密钥将过期。

另一个问题是,你的'攻击者'在技术上可能会先刮一个页面来获得一个新的密钥并使用它,并在到期时再次擦除等等。

该解决方案非常适合防止盗链。

0

这是如何完成的in MVC。不幸的是,它看起来并没有像WebForms一样的安全性(至少据我所知)。