我正在尝试自动使用this site,用户可以在其中使用临时的电子邮件地址,这些地址也可以由他们手动指定。通过将<input name="csrf" type="hidden">
输入到表单中并带有一组随机字符,它使用了非常简单的反垃圾邮件保护,然后需要将其包含在POST请求中。因此,如果CSRF为bj152nvua2ob
,并且我希望新地址为“ john@l0real.net”,则我的POST必须为:
csrf=bj152nvua2ob&mail=john&domain=@l0real.net
问题是,我无法使用cURL和PHP做到这一点。这是我的代码的顶部:
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_URL, "temp-mail.org/en/option/change/");
// Without CURLOPT_FOLLOWLOCATION, the page is not going to load.
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
$html = curl_exec ($ch);
然后,在得到响应后,我开始生成一个新的邮件地址并开始获取CSRF,因此,我编写了两个简单的函数,分别称为“ generate_mail”和"get_csrf"。我已经测试了它们两个,它们似乎可以正常工作。
$csrf = get_csrf ($html);
$mail = generate_mail ();
$post = "csrf=$csrf&mail=$mail&domain=@l0real.net";
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
file_put_contents ("final_response.html", curl_exec ($ch));
curl_close ($ch);
在我的PC上创建文件final_response.html
然后查看它之后,我注意到结果不是我所期望的。经过一些尝试,我决定使用Fiddler调试连接,然后发现一些有趣的事情。这是通过浏览器使用此网站时得到的:
请注意,针对... 4共有1个元素(不包括隧道)!第一个元素为空响应,但第二个元素包含HTML页面。最后两个是相同的:第三个是空响应(那是我的POST发送的地方),第四个包含具有不同CSRF和不正确邮件地址的HTML页面(该页面是由网站本身生成的,而不是由我生成的)。据我所知,每次使用curl_exec
时,它首先加载一个空白页面,然后加载正确的页面。我的所有请求都被发送到空请求,因此稍后将被忽略。这是安全措施,还是我没有正确配置cURL?我试图提供尽可能多的信息,展示了我的每个步骤,希望可以解决此问题。
答案 0 :(得分:0)
通过添加以下代码行来解决:
curl_setopt ($ch, CURLOPT_POSTREDIR, 3);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $path_to_cookies);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $path_to_cookies);
现在,它可以按预期的方式运行!