防止伪造Http请求

时间:2011-04-28 20:48:18

标签: javascript xmlhttprequest httphandler httprequest

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

2 个答案:

答案 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那样安全性好(至少据我所知)。