使用 ColdFusion 将凭据发布到 cfhttp 正文
Posting credentials to cfhttp body using ColdFusion
我正在传递一些凭据以及 __EVENTARGUMENT、__VIEWSTATE。但是我无法在控制台或提琴手中看到变量和数据,我是不是遗漏了什么。我尝试使用 url、formfield 和 body 但没有成功。顺便说一下,我使用的是 ColdFusion 9。
<cfset authenticationRequestBody = "__LASTFOCUS=#LASTFOCUS#&__EVENTTARGET=#EVENTTARGET#&__EVENTARGUMENT=#EVENTARGUMENT#&__VIEWSTATE=#EncodeViewState#&__VIEWSTATEGENERATOR=#EncodeViewGenerator#&__EVENTVALIDATION=#EncodeEventValidation#&#encodeForURL(UNameString)#=#UserName#&#encodeForURL(PwdString)#=#encodeForURL(Password)#&#encodeForURL(ButtonString)#=Submit">
<cfset stsUrl = "https://somesite.com/yyy/login.aspx" >
<cfhttp url="#stsUrl#" method="post" resolveurl="no" >
<cfhttpparam type="header" name="Accept" value="application/xhtml+xml,text/html">
<cfhttpparam type="header" name="REFERER" value="#BaseUrl#" >
<cfhttpparam type="header" name="Accept-Language" value="en-US">
<cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded">
<cfhttpparam type="header" name="Connection" value="keep-alive" >
<cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" >
<cfloop collection="#cookies#" item="i">
<cfhttpparam type = "cookie" name="#i#" value="#cookies[i]#">
</cfloop>
<cfhttpparam type="body" name="PostData" value="#authenticationRequestBody#">
<cfoutput>
<cfdump var="#GetHTTPRequestData()#">
</cfoutput>
这不是与配置相关的问题,因为我使用 SSL 测试服务器在站点上检查了 JVM 版本和 TLS 版本。我在代码中遗漏了一些东西..
Coldfusion 11(更新 12)
虚拟机:1.8
TLS:1.2
我能够进入登录屏幕。即使在正文中传递了用户名和密码之后,它也不会验证。当我使用相同的凭据直接访问 URL 时,它使我成功登录。
尝试
<cfdump var="#cfhttp#">
或
<cfhttp url="#stsUrl#" method="post" resolveurl="no" result="result" >
...
</cfhttp>
<cfdump var="#result#">
问题不在于配置或兼容版本。问题在于我们从一开始就传递的 cookie。当我们使用 cfhttp 浏览其他页面时,我们需要携带我们从中获得的旧 cookie过去的 cfhttp 调用。在我的情况下,我需要在第一次调用时初始化 cookie。下面是两次调用的示例。
<cfhttp url='#BaseUrl#' method="get" redirect="no">
<cfhttpparam type="header" name="Connection" value="keep-alive" >
<cfhttpparam type="header" name="Cache-Control" value="no-cache">
<cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko">
<cfhttpparam type="header" name="cookie" value="TestCookie=;" >
</cfhttp>
<cfhttp url="#stsUrl#" method="post" redirect="no" resolveurl="yes" result="postResult" >
<cfhttpparam type="header" name="REFERER" value="#BaseUrl#" >
<cfhttpparam type="header" name="Cache-Control" value="no-cache">
<cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded">
<cfhttpparam type="header" name="Connection" value="keep-alive" >
<cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" >
<cfhttpparam type="header" name="cookie" value="TestCookie=;" encoded="yes">
<cfloop collection="#CookieList#" item="i">
<cfhttpparam type="header" name="cookie" value="#CookieList[i]#" encoded="yes">
</cfloop>
<cfhttpparam name="__LASTFOCUS" value="" type="formfield">
<cfhttpparam name="__EVENTTARGET" value="" type="formfield">
<cfhttpparam name="__EVENTARGUMENT" value="" type="formfield">
<cfhttpparam name="__VIEWSTATE" value="#VIEWSTATE#" type="formfield">
<cfhttpparam name="__VIEWSTATEGENERATOR" value="#VIEWSTATEGENERATOR#" type="formfield">
<cfhttpparam name="__EVENTVALIDATION" value="#EVENTVALIDATION#" type="formfield">
<cfhttpparam name="ctl00$MainContent$LoginCtrl$UserName" value="#UserName#" type="formfield">
<cfhttpparam name="ctl00$MainContent$LoginCtrl$Password" value="#Password#" type="formfield">
<cfhttpparam name="ctl00$MainContent$LoginCtrl$LoginButton" value="Submit" type="formfield">
</cfhttp>
我正在传递一些凭据以及 __EVENTARGUMENT、__VIEWSTATE。但是我无法在控制台或提琴手中看到变量和数据,我是不是遗漏了什么。我尝试使用 url、formfield 和 body 但没有成功。顺便说一下,我使用的是 ColdFusion 9。
<cfset authenticationRequestBody = "__LASTFOCUS=#LASTFOCUS#&__EVENTTARGET=#EVENTTARGET#&__EVENTARGUMENT=#EVENTARGUMENT#&__VIEWSTATE=#EncodeViewState#&__VIEWSTATEGENERATOR=#EncodeViewGenerator#&__EVENTVALIDATION=#EncodeEventValidation#&#encodeForURL(UNameString)#=#UserName#&#encodeForURL(PwdString)#=#encodeForURL(Password)#&#encodeForURL(ButtonString)#=Submit">
<cfset stsUrl = "https://somesite.com/yyy/login.aspx" >
<cfhttp url="#stsUrl#" method="post" resolveurl="no" >
<cfhttpparam type="header" name="Accept" value="application/xhtml+xml,text/html">
<cfhttpparam type="header" name="REFERER" value="#BaseUrl#" >
<cfhttpparam type="header" name="Accept-Language" value="en-US">
<cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded">
<cfhttpparam type="header" name="Connection" value="keep-alive" >
<cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" >
<cfloop collection="#cookies#" item="i">
<cfhttpparam type = "cookie" name="#i#" value="#cookies[i]#">
</cfloop>
<cfhttpparam type="body" name="PostData" value="#authenticationRequestBody#">
<cfoutput>
<cfdump var="#GetHTTPRequestData()#">
</cfoutput>
这不是与配置相关的问题,因为我使用 SSL 测试服务器在站点上检查了 JVM 版本和 TLS 版本。我在代码中遗漏了一些东西..
Coldfusion 11(更新 12) 虚拟机:1.8 TLS:1.2
我能够进入登录屏幕。即使在正文中传递了用户名和密码之后,它也不会验证。当我使用相同的凭据直接访问 URL 时,它使我成功登录。
尝试
<cfdump var="#cfhttp#">
或
<cfhttp url="#stsUrl#" method="post" resolveurl="no" result="result" >
...
</cfhttp>
<cfdump var="#result#">
问题不在于配置或兼容版本。问题在于我们从一开始就传递的 cookie。当我们使用 cfhttp 浏览其他页面时,我们需要携带我们从中获得的旧 cookie过去的 cfhttp 调用。在我的情况下,我需要在第一次调用时初始化 cookie。下面是两次调用的示例。
<cfhttp url='#BaseUrl#' method="get" redirect="no">
<cfhttpparam type="header" name="Connection" value="keep-alive" >
<cfhttpparam type="header" name="Cache-Control" value="no-cache">
<cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko">
<cfhttpparam type="header" name="cookie" value="TestCookie=;" >
</cfhttp>
<cfhttp url="#stsUrl#" method="post" redirect="no" resolveurl="yes" result="postResult" >
<cfhttpparam type="header" name="REFERER" value="#BaseUrl#" >
<cfhttpparam type="header" name="Cache-Control" value="no-cache">
<cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded">
<cfhttpparam type="header" name="Connection" value="keep-alive" >
<cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" >
<cfhttpparam type="header" name="cookie" value="TestCookie=;" encoded="yes">
<cfloop collection="#CookieList#" item="i">
<cfhttpparam type="header" name="cookie" value="#CookieList[i]#" encoded="yes">
</cfloop>
<cfhttpparam name="__LASTFOCUS" value="" type="formfield">
<cfhttpparam name="__EVENTTARGET" value="" type="formfield">
<cfhttpparam name="__EVENTARGUMENT" value="" type="formfield">
<cfhttpparam name="__VIEWSTATE" value="#VIEWSTATE#" type="formfield">
<cfhttpparam name="__VIEWSTATEGENERATOR" value="#VIEWSTATEGENERATOR#" type="formfield">
<cfhttpparam name="__EVENTVALIDATION" value="#EVENTVALIDATION#" type="formfield">
<cfhttpparam name="ctl00$MainContent$LoginCtrl$UserName" value="#UserName#" type="formfield">
<cfhttpparam name="ctl00$MainContent$LoginCtrl$Password" value="#Password#" type="formfield">
<cfhttpparam name="ctl00$MainContent$LoginCtrl$LoginButton" value="Submit" type="formfield">
</cfhttp>