gpt4 book ai didi

asp.net - 通过 phantomjs 将表单例份验证 session cookie 重播到 ASP.NET

转载 作者:行者123 更新时间:2023-12-03 01:29:01 26 4
gpt4 key购买 nike

目标

我的目标是通过 phantomjs 脚本重播一组 ASP.NET 表单例份验证 session cookie。

我尝试过的

我的 phantomjs 脚本如下。如果我将 cookie 重播到本地 VS2010 ASP.NET 开发服务器中托管的网站,该脚本就会起作用。但是,如果我在 IIS6 上托管的网站上尝试相同的代码,重播就会失败。

当代码在 IIS7 上运行时,重放似乎工作正常

注意:我确实意识到两个不同 session (IIS 和 ASP.NET 开发服务器)的身份验证 cookie 是不同的,并且我为每个 session 使用正确的 cookie。

怀疑

我怀疑有:

  • 我用于 Cookie 域的值有问题
  • IIS6 和 VS 处理身份验证 cookie 的方式不同,也许 IIS6 不会接受来自不同 IP 的重播?

脚本

var page = require('webpage').create();  

var tests = {
'localhost': {
url: 'http://localhost/Test.aspx',
cookies:
[{
"name":"ASP.NET_SessionId"
,"value":"abcdefghijk"
,"domain":'localhost'
},{
"name":".ASPXFORMSAUTH"
,"value":"2D23D9EFF2F538..."
,"domain":'localhost'
}]
},
'www.myserver.com': {
url: 'http://www.myserver.com/Test.aspx',
cookies:
[{
"name":"ASP.NET_SessionId"
,"value":"lmnopqrstuv"
,"domain":'www.myserver.com'
},{
"name":".ASPXFORMSAUTH"
,"value":"9EFF2F53823BDA..."
,"domain":'www.myserver.com'
}]
}
};

// uncomment the test you want to perform
var test = tests['localhost'];
// var test = tests['www.myserver.com'];

phantom.addCookie(test.cookies[0]);
phantom.addCookie(test.cookies[1]);

page.open(test.url, function (status) {
if (status !== 'success') {
console.log('Unable to access network');
} else {
console.log(page.content);
}
phantom.exit();
});

解决方法:

由于该问题仅发生在我的开发环境中:作为解决方法,我创建了一个将返回 session 和身份验证 cookie 的 Web 服务。然后从我的 PhantomJS 脚本中打开该服务,以便将 cookie 添加到当前的 PhantomJS 上下文中。然后我会打开我所定位的真实网址。在没有实际验证用户身份的情况下传递我们的身份验证 cookie 有点安全漏洞,因此我将其包装在编译器指令中,以便它在生产版本中不可用。

C#

HttpContext.Current.Response.Cookies.Add(FormsAuthentication.GetAuthCookie(username, true, "/"));

js:

page.open(authUrl, function (status) {
page.open(address, function (status) {
});
});

最佳答案

每台机器都使用自己特定的机器 key 来加密 cookie。因此,您实际上无法从一台机器上获取 cookie 并在另一台机器上使用它。仅当您在两台计算机上设置相同的 key 时,这才有效,您可以通过 google 搜索更多详细信息,因为这是一项常见任务(当您拥有网络场时,拥有相同的 key 至关重要)。

此外,cookie 中编码的值之一是其超时。这意味着只能在很短的时间窗口内重播(默认为 20 分钟)。较早发出的 Cookie 将被拒绝。这样,asp.net 就可以防御过旧 cookie 的重播攻击。

最有可能的是,您的场景中出现了这两个问题之一。

编辑:在您澄清后,出现了另一个可能的原因:您的 phantomjs 客户端缺少允许 asp.net 识别客户端支持 cookie 的 header 。常见的解决方法是在服务器上安装 net 4.5。不常见的是将参数添加到表单例份验证设置中:

<authentication mode="forms">
<forms ... cookieless="UseCookies" />

强制 cookie 支持。

关于asp.net - 通过 phantomjs 将表单例份验证 session cookie 重播到 ASP.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20712150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com