[英]Delphi & Twebbrowser - How to recover a security token supplied by a login page?
我正在Delphi(2009)中使用Twebbrowser登录到ISP上的cpanel,并为MySQL数据库添加新的远程主机IP地址。 用户名和密码使用单击此处的“提交”按钮的代码填充,此处使用从此处多个位置收集的代码。
直接导航到主机页面会导致首先显示cpanel登录页面。 我的程序检测到此情况并登录。
这使用像
WebBrowser1.Navigate'https://thedomain.sgcpanel.com:2083/cpsess1819495779/frontend/Crystal/sql/managehost.html');
到达主机页面可以,但是我注意到安全令牌(cpsess1819495779)每次都更改为其他名称,大概是由登录页面提供的。
但是,如果我尝试先作为单独的操作登录, 然后使用以下方法导航到主机页面
WebBrowser1.Navigate('https://thedomain.sgcpanel.com:2083');
其次是
WebBrowser1.Navigate'https://thedomain.sgcpanel.com:2083/cpsess1819495779/frontend/Crystal/sql/managehost.html');
我收到一则服务器消息,指出主机页面的URL具有无效的安全令牌-大概是cpsess1819495779位
题
如何使用Twebbrowser掌握登录页面生成的安全令牌,以便使用它为主机页面构建正确的url,以便每次都传递正确的安全令牌。
这可能与Cookie等有关,但我不知道该如何处理(还)
顺便说一句,因为Twebbrowser不可见,我确实花了几天的时间尝试使用Indy的TIdHTTP做相同的事情,但是由于出现了很多我无法解决的错误,我已经放弃了。
我不妨自己回答这个问题以结束问题,也可以避免由于广泛的研究未能给出答案而又再投下一个问题,而这又没有我的简洁性。
cpanel(许多ISP用于管理MySQL,电子邮件等的应用程序)的API文档位于: https : //documentation.cpanel.net/display/SDK/Guide+to+cPanel+API+2
其中一部分说
安全令牌登录到服务器后,它将自动将安全令牌附加到会话的URL。 安全令牌有助于防止通过XSRF(跨站点请求伪造)对网站的授权使用。 安全令牌包含字符串cpsess和10位数字。
在IE / Chrome等中手动登录确实确实显示了令牌,例如cpsess1819495779插入了导航到的原始URL。 所以如果我导航到
https://thedomain.sgcpanel.com:2083/cpsess0000000000/frontend/Crystal/sql/managehost.html
(登录到cpanel),则cpsess之后在浏览器中显示的部分网址会更改为类似的形式,其中数字每次都会更改。
https://secureukm11.sgcpanel.com:2083/cpsess1819495779/frontend/Crystal/sql/managehost.html
但是,使用Twebbrowser使用以下命令显示修改后的网址
memo1.Lines.Add(WebBrowser1.LocationURL);
要么
ShowMessage('URL: ' + Webbrowser1.OleObject.Document.Url);
只是显示带有零的原始网址,而不是真实的安全令牌。
因此,我的问题的答案似乎是它不能在Twebbrowser中完成,因为仅在服务器上更改了URL,并且安全令牌没有传输回浏览器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.