gpt4 book ai didi

php - 抓取密码保护的ASP页面

转载 作者:行者123 更新时间:2023-12-04 12:52:36 25 4
gpt4 key购买 nike

我想为 asp 密码保护的网页开发自动抓取工具。我有此页面的登录名/密码。

首先,在通过 firefox 授权期间查看 Firebug 日志。我发现了什么:

  1. 当我打开登录页面时,我得到带有“__RequestVerificationToken”的cookie。即 http://mysite
  2. 当我按下登录按钮时,FF 使用参数用户名、密码和 __RequestVerificationToken 对 http://mysite/Account/Login 进行 POST 查询,它还使用在步骤 1 中保存的 cookie
  3. 如果授权成功,我会得到另一个 cookie .ASPXAUTH 并转到 http://mysite/Account/Index(我想抓取的页面)

我的代码

//1. Get __RequestVerificationToken cookie

$urlLogin = "http://mysite";
$cookieFile = "cookie.txt";
$regs=array();

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $urlLogin);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_STDERR,$f = fopen("answer.txt", "w+"));
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0' );
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);

$data=curl_exec($ch);

//2. Parse token value for the post request

$hash=file_get_contents("answer.txt");
preg_match_all('/=(.*); p/i',$hash, $regs);

//3. Make a post request

$postData = '__RequestVerificationToken='.$regs[1][0].'&UserName=someLogin'.'&Password=somePassword';
$urlSecuredPage = "http://mysite/Account/Login";
curl_setopt($ch, CURLOPT_URL, $urlSecuredPage);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);

$data = curl_exec($ch);
curl_close($ch);

在第 3 步中,我在第 1 步中保存的 cookie 正在使用 __RequestVerificationToken 的新值重写。我不明白为什么会这样。结果,由于 __RequestVerificationToken 错误,我无法授权并收到 HTTP 500 错误。

我哪里错了?

最佳答案

__RequestVerificationToken 应该有两件事。其中之一在隐藏的输入值中,第二个在 cookie 中。来自隐藏输入值的值在每个请求中发送。对于每个请求,它都有一个新值。这取决于 cookie 值。

所以需要保存input value和cookie,一起传回去。如果您不从隐藏输入发送值,那么 Asp.Net MVC 认为这是一次攻击,并生成新的 cookie。仅当验证失败或 cookie 本身不存在时,才会生成新的 cookie。如果您获得该 cookie,并且您总是通过 POST 请求发送 __RequestVerificationToken 输入值,那么它不应该生成新的 cookie。

如果它仍然生成,那么您从隐藏的输入值发送了不正确的 __RequestVerificationToken。尝试从 Fiddler\Charles 做同样的事情,并检查是否返回成功结果。

它们用于防止 CSRF 攻击。

关于php - 抓取密码保护的ASP页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21795399/

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