我一整天都在寻找一种方法来解决这个问题,但没有成功,我想也许有人可以帮忙吗?
我试图在我的.Js文件中使用秘密密码,但我不能直接在文件中写入,因为每个人都可以在访问源代码时看到它。例如,我需要使用ajax将此密码发送到另一个页面,以确保HttpRequest来自我的网站,而不是来自另一个伪造的httprequest。
这是否可能,因为我已经尝试了其他所有内容,例如认证表格,但这没有帮助
我正在使用asp.net和HttpHandler作为返回数据的页面。
答案 0 :(得分: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小时)他们的密钥将会过期。
另一个问题是,你的'攻击者'可以在技术上首先抓取一个页面来获取一个新密钥并使用它,并在它到期时再次刮擦等等。
此解决方案非常适合防止热链接。
答案 1 :(得分:0)
这就是它的完成方式in MVC。不幸的是,它看起来并不像WebForms那样安全性好(至少据我所知)。