使用curl与PHP进行身份验证-神秘的安全性


Using curl with PHP to authenticate - mysterious security

我正在尝试制作一个脚本,该脚本将运行在我每天访问的一些网站上,并从中获得最有趣的信息/统计数据。我想使用curl来达到这个目的,因为其中一些网站需要身份验证。一切都很好,直到我撞上了网站:rossnet.pl,它似乎在某种程度上是安全的,因为我根本无法验证自己。

我想使用的表格可以在这里找到:https://www.rossnet.pl/rossnetlogin.aspx

在左边的文字下面:"Mam konto w Rossnet.pl-Logowanie"。它似乎没有任何隐藏的输入字段,只有两个用于凭据的文本字段,称为:-"dnn$ctr1203$ViewLogin$txtUserLogin"-"dnn$ctr1203$ViewLogin$txtUserPass"

我使用下面显示的代码,但服务器返回的页面似乎什么都没发生(没有错误消息,看起来和我不发送任何POST数据时一样)。

有人知道可能出了什么问题吗?在下面的代码中,我为您提供了实际的帐户凭据,以便您能够测试脚本,如果您希望帮助我的话。

在这里,您可以看到下面的脚本是如何在我的服务器上工作的:http://kremuwa.netii.net/rossman/skrypt.php

<?php
$url = "https://www.rossnet.pl/rossnetlogin.aspx";   
$ch = curl_init();  
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);        
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'dnn$ctr1203$ViewLogin$txtUserLogin=warzywko3000&dnn$ctr1203$ViewLogin$txtUserPass=password123');
$output = curl_exec($ch);  
curl_close($ch);  
echo $output;
?>

登录表单有时会受到挑战的保护,这些挑战使您无法在不首先加载页面的情况下直接提交表单。我列出了一些可能会阻碍你的选择。

一种选择是cookie挑战,它也是最容易处理的,只需加载页面(获取cookie)并将其与表单提交一起发送。

另一种选择是隐藏领域的挑战;一个隐藏的表单字段中填充了一个质询代码,提交时希望也发送该值。

我能想到的最后一个选项是一种涉及JavaScript的更困难的方法;页面将使用JavaScript加载质询字符串,可能会对其进行模糊处理,然后将其发送(通过隐藏的表单字段或ajax请求)。