1

我正在尝试在 ColdFusion 中创建一个功能,该功能将允许我登录到 EA Sports Web 应用程序,以便我可以检索我的个人资料数据并将其显示在我的网站上。

从他们的登录页面查看源代码,第一步似乎只是一个简单的登录表单:

<form method="post" id="login_form" action="https://www.ea.com/uk/football/services/authenticate/login" class="login_form" enctype="application/x-www-form-urlencoded">
    <input type="hidden" name="redirectUrl" value="http://www.ea.com/uk/football/fifa-ultimate-team" />
    <input type="hidden" name="failureUrl" value="http://www.ea.com/uk/football/login?failed=true&amp;redirectUrl=http%3A%2F%2Fwww.ea.com%2Fuk%2Ffootball%2Ffifa-ultimate-team" />
    <input type="hidden" name="captchaFailureUrl" value="http://www.ea.com/uk/football/login?failed=true&amp;redirectUrl=http%3A%2F%2Fwww.ea.com%2Fuk%2Ffootball%2Ffifa-ultimate-team" />
    <input id="email" name="email" class="text" type="text" tabindex="1" />
    <input id="password" name="password" class="text" type="password" tabindex="2" />
    <input type="checkbox" id="stay-signed" name="stay-signed" value="ON" checked="checked" tabindex="3" />
</form>

我正在使用 CFHTTP 请求提交以下内容:

<cfhttp url="https://www.ea.com/uk/football/services/authenticate/login" method="POST" result="myResult">
    <cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded" />
    <cfhttpparam type="formField" name="email" value="#Variables.user#" />
    <cfhttpparam type="formField" name="password" value="#Variables.password#" />
</cfhttp>

当我转储返回的内容时,fileContent 包含以下内容: <authenticate><success>0</success></authenticate>我假设这意味着登录没有成功。

我知道我在这里并没有给你太多可玩的东西,但是尝试让登录进行身份验证似乎并没有太多的好处。任何人都可以指出我可能会出错的地方吗?

4

2 回答 2

2

我不确定这是否能解决您的问题,但是当您远程提交表单时需要考虑一些事项。

首先,您不知道表单背后的逻辑是什么,因此您应该提交表单中的所有内容,以防处理程序需要它。如果它需要一个您未提交的表单字段,则会发生错误并且您将无法登录。

其次,您可以从技术上考虑您的行为,尽管对于您的使用来说是完全合法的,机器人或黑客。目标网站可能希望确保表单实际上正在访问处理程序。他们可能正在查看 HTTP_REFERER,或者他们甚至可能正在做一些更花哨的事情,例如查看会话的持续时间,因为没有人可以在 0.0001 秒内提交表单。在这些情况下,除非您发现他们的安全逻辑存在缺陷,否则您可能根本无法登录。

第三,为了保护网站,一些逻辑还会查看客户端以确保您是真正的浏览器。userAgent 属性的默认值为“COLDFUSION”。如果目标期望更长的时间,或包含有效的浏览器名称,则脚本将假定您是机器人并拒绝请求。不过,解决方案很简单。只需在您的 userAgent 属性中输入一个好的浏览器名称即可。您可以通过转储 cgi 范围来获得您的。这样做的问题是您应该以某种方式对其进行维护,这样您就不会在 5 年后尝试使用旧浏览器,并且目标会说“对不起,伙计”。我们不再支持 IE6...'

<cfhttp userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; {...}" ...>
于 2013-01-23T14:38:42.893 回答
0

所有让您登录的网站都需要使用 cookie 来实现这一点,因为这是它们让您保持登录并保持会话的方式。然后,该 cookie 与每个后续页面请求一起发送到服务器,以验证您是否已登录。因此,您需要使用 cfhttp 请求来模拟这一点。见这篇文章 http://www.bennadel.com/blog/725-Maintaining-Sessions-Across-Multiple-ColdFusion-CFHttp-Requests.htm

于 2013-01-23T14:18:15.467 回答