2015-06-21 172 views
0

注:我已經取代了過去的5個字符的會話ID與「X的原因很明顯刮痧:從瀏覽器會話ID的工作原理,但刮會話ID不

我刮網站。我可以在瀏覽器中看到登錄設置了一個名爲PHPSESSID的cookie值。沒問題,我可以刮即:

superagent 
    .post(loginUrl) 
    .send(loginDetails) 
    .end(function(err, res){ 
     var setCookieValue = res.headers['set-cookie'][0] 
     var sessionID = cookieParser.parse(setCookieValue).PHPSESSID 
     console.log(sessionID) 

返回:

37c3bog3tf6erp2i6ss5vxxxxx 

它看起來像一個PHP會話ID。大!現在使用會話ID:

superagent 
.get(loggedInURL) 
.set('Cookie', 'PHPSESSID'=sessionID) 
.end(err, res) 

將我重定向到登錄頁面。但會話ID我手動得到了來自瀏覽器,在完全一樣的格式,做工精細

var fakeSessionID = 'a1oslk341uoht8p6009q5xxxxx' 
superagent 
.get(loggedInURL) 
.set('Cookie', 'PHPSESSID='+fakeSessionID) 

將返回loggedInURL,與登錄的用戶的完整的HTML。

爲什麼不是我正在拼命工作的會話ID?

  • 的格式是相同
  • 的字符計數是相同的(26個字符)

沒有什麼從這是工作和非工作碼之間的不同的會話ID旁白。

有什麼可以使差異?

+0

抓取的cookie是否包含控制字符,例如最後一條新線? – halfer

回答

2

PHP有一些dubious extra security for sessionschecking Referer

有些網站可能另外還有check User-Agent

+0

我已經切換到使用superagent的持久選項,例如'var agent = superagent.agent()'。這爲我處理查閱者,cookies和其他與持久性有關的事宜。既然上面的答案是最接近那個解決方案,我把它標記爲正確的,並且給你這個表情符號玉米: – mikemaccana

1

您可以嘗試在呼叫在頭扔了不同的用戶代理屬性的SuperAgent爲GET和POST:

.set('User-Agent','Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0') 
+0

優秀的建議,但沒有變化。 – mikemaccana

+1

你可以試着閱讀這篇文章:https://contourline.wordpress.com/2012/09/20/using-superagent-to-authenticate-a-user-agent-in-node-js/ –

0

你的代碼看起來不更換字符串「會話ID」與實際會話ID值...

superagent 
.get(loggedInURL) 
.set('Cookie', 'PHPSESSID=sessionID') 
.end(err, res) 

應該是什麼樣的?

superagent 
.get(loggedInURL) 
.set('Cookie', 'PHPSESSID='+sessionID) 
.end(err, res) 

我想......

+0

你是對的,但是當爲StackOverflow做一個測試用例時,這是一個錯誤。我的真實代碼在正確的地方有引號。感謝您指出這一點。 – mikemaccana