使用CFHTTP登录

时间:2013-01-23 12:42:54

标签: authentication login coldfusion cfhttp

我正在尝试在ColdFusion中创建一个允许我登录EA Sports Web App的功能,这样我就可以检索我的个人资料数据并将其显示在我的网站上。

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

<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>表示登录未成功。

我知道我在这里玩的并不多,但是尝试登录验证似乎并不多。任何人都可以指出我可能会出错的地方吗?

2 个答案:

答案 0 :(得分:2)

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

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

其次,你可以在技术上考虑你的行为,虽然完全合法的使用,机器人或黑客。目标网站可能希望确保表单实际访问该处理程序。他们可能正在查看HTTP_REFERER,或者他们甚至可能会做一些更奇特的事情,比如查看会话的持续时间,因为没有HUMAN可以在.0001秒内提交表单。在这些情况下,除非您发现其安全逻辑存在缺陷,否则您可能根本不会登录。

第三,保护网站的一部分逻辑也会查看客户端以确保您是真正的浏览器。 userAgent属性的默认值为“COLDFUSION”。如果目标期望更长的时间,或者包含有效的浏览器名称,则脚本将假定您是机器人并拒绝该请求。尽管如此,解决方案很简单。只需在userAgent属性中添加一个好的浏览器名称即可。您可以通过转储cgi范围来获取您的。这样做的问题是你应该保持一定程度,因为你不会在5年后尝试使用旧的浏览器而且目标是“对不起,密友。我们不再支持IE6了......'

<cfhttp userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; {...}" ...>

答案 1 :(得分:0)

所有登录您的网站都需要使用Cookie来实现此目标,因为这是他们保持登录和维护会话的方式。 然后将该cookie发送到服务器,每个后续页面请求都会在您登录时对您进行身份验证。 因此,您需要使用cfhttp请求来模拟这一点。 看到这篇文章 http://www.bennadel.com/blog/725-Maintaining-Sessions-Across-Multiple-ColdFusion-CFHttp-Requests.htm