Javascript 防止伪造httprequest

Javascript 防止伪造httprequest,javascript,xmlhttprequest,httphandler,httprequest,Javascript,Xmlhttprequest,Httphandler,Httprequest,我一整天都在寻找一种方法来解决这个问题,但没有成功,我想也许这里有人能帮上忙? 我试图在我的.Js文件中使用一个秘密密码,但我不能直接在文件中写入它,因为每个人在访问源代码时都可以看到它。e、 g我需要使用ajax将此密码发送到另一个页面,以确保HttpRequest来自我的网站,而不是来自另一个forge HttpRequest这是可能的,因为我尝试了其他方法,如身份验证表单,但没有帮助。 我使用asp.net和HttpHandler作为返回数据的页面。您可以使用PHP生成一个在设定时间内有效

我一整天都在寻找一种方法来解决这个问题,但没有成功,我想也许这里有人能帮上忙? 我试图在我的.Js文件中使用一个秘密密码,但我不能直接在文件中写入它,因为每个人在访问源代码时都可以看到它。e、 g我需要使用ajax将此密码发送到另一个页面,以确保HttpRequest来自我的网站,而不是来自另一个forge HttpRequest
这是可能的,因为我尝试了其他方法,如身份验证表单,但没有帮助。

我使用asp.net和HttpHandler作为返回数据的页面。

您可以使用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");
    }
}
功能检查($key){
列表($hash,$timestamp)=分解(“|”),$key,2);
如果($hash!==md5($password.$key)){
抛出新异常(“顽皮!”);
}
如果($timestamp<$\u服务器['REQUEST\u TIME']<60*60){
抛出新异常(“太旧”);
}
}
不利的一面是,不经常刷新页面的人(在我的示例中,这是1小时)的密钥将过期

另一个问题是,从技术上讲,您的“攻击者”可能首先刮取页面以获取新密钥并使用该密钥,然后在该密钥过期时再次刮取,以此类推


此解决方案对于防止热链接非常有效。

就是这样做的。不幸的是,WebForms的安全性似乎与WebForms不同(至少据我所知)。

大多数主要平台都包含某种本机反伪造令牌。如果我们知道您使用的是什么web框架,这会有所帮助。ASP.NET 3.5这就是您的意思吗?