日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

CSDN登录机制分析(附上python、java代码)

發布時間:2025/3/20 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CSDN登录机制分析(附上python、java代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大綱

  • 前言
  • 分析加密參數
    • uaToken
    • webUmidToken
  • 發送模擬請求
  • 對比解決障礙
    • 瀏覽器發送
    • postman模仿
  • 小結
  • 編寫代碼
    • python
    • java

前言

  • 很久以前研究過csdn的模擬登錄,記得那個時候的csdn登錄還是一個`form``表單,然后參雜著一些參數。使用遍歷input元素把表單各個參數拿下來。存下直接post即可登陸成功。

  • 前幾天再次看了下親愛的csdn。突然發現多了這連個參數。這就勾起了我的性趣和好奇心:我靠,就一年沒見,csdn也搞這么一大串加密?并且以看兩種加密方式還不一樣哇?有點東西!

  • 下面就分享一下分析的過程!由于時間有限,只能每晚抽點時間研究,如果大家感覺不夠深入或者講的不好請諒解!大家也可以看另一篇破解的文章
    爬蟲之網易云js解密剖析

使用工具:

  • 谷歌瀏覽器
  • postman發送請求調試
  • fidder抓包

分析加密參數

可以根據上圖分析得知:有uaToken 和webUmidToken兩個token。
分析參數肯定是要打斷點的,一般有直接搜索,查看js調用堆棧,和hook查找找到參數位置。我是利用搜索找參數。
分析前先做好一些預備工作,多發幾個請求,刷新頁面。你會發現:

  • 不刷新頁面的話uaToken不會變化。
  • webUmidToken每次都不一樣。
  • 每次cookie不變。
  • uaToken

    • 查找uaToken發現這段代碼比較詭異。打斷點debug。發現沒錯,這就是我們要找的!點擊F11,進入子函數查看發生了什么。

    • 進去發現它執行e()函數。再次F11查看。

    • 通過校驗發現e函數其實就是一個加密函數,關鍵是它跟我們的核心數據(賬號、cookie、密碼等)無關,所以這個加密數據空有其架勢無作用。你可以保存一個直接一直使用一個(如果可逆后臺可能會根據字符串進行校驗是否符合規則)。

    webUmidToken

    每次刷新都會發現他在變化,鑒于前面的token都沒啥作用,我大膽猜測,他也不影響登錄!就先不debug分析了。



    發送模擬請求

    • 通過瀏覽器的頭發送請求信息。你會發現:不管你怎么模擬都是各種錯誤,要么類型錯誤,要么繁忙,要么類型錯誤。(可以看得出csdn是java后臺,個人感覺接口異常處理的還有問題。暴露方法了)

    對比解決障礙

    有時候瀏覽器太過于局限。用fidder找到其中不同之處。用瀏覽器和postman發送請求找到其中參數的不同之處。

    瀏覽器發送


    postman模仿

    • 你可以發現其中主要是格式區別,和部分頭信息瀏覽器不顯示需要加上。然后發送請求檢驗!

    小結

  • 后來發現其實那兩個token,和cookie為空都沒有關系!(可能掃碼登錄驗證的token,有興趣可以自行分析)
  • cookie也沒有限制,在登錄時候根本不要cookie都可以。按理論來說應該進入頁面返回一組cookie,用這個cookie訪問登錄接口有效才行,顯然csdn沒有。
  • 分析一波約等于白分析,登錄機制太簡單了。
  • content-length別亂加,加錯了它后臺校驗或出錯
  • 也就是登錄著需要type,賬號密碼即可,其他設為空都行。要注意的就是參數發送的格式!raw文本。
  • 以后見到類似先測試登錄,不能盲目分析。雖然能夠增加經驗,但是有點浪費時間。。像csdn這次就是。。啥都沒用。
  • 編寫代碼

    思路:訪問登錄接口,用返回的cookie訪問我關注的人的文章!

    python

    import requests from bs4 import BeautifulSoupurl='https://passport.csdn.net/v1/register/pc/login/doLogin' header={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36','referer':'https://passport.csdn.net/login','origin':'https://passport.csdn.net','content-Type':'application/json;charset=UTF-8','x-requested-with':'XMLHttpRequest','accept':'application/json, text/plain, */*','accept-encoding':'gzip, deflate, br','accept-language':'zh-CN,zh;q=0.9','connection': 'keep-alive','Host': 'passport.csdn.net'} data='{"loginType":"1","pwdOrVerifyCode":"你的密碼",' \'"userIdentification":"你的賬號","uaToken":"",' \'"webUmidToken":""}' req=requests.post(url,data=data,headers=header) cookies = requests.utils.dict_from_cookiejar(req.cookies) res=req.text print(res) print(req.status_code) print(cookies)url2='https://blog.csdn.net/nav/watchers' req2=requests.get(url2,cookies=cookies) soup=BeautifulSoup(req2.text,'lxml')print(soup.text)

    java

    依賴jsoup、fastjson

    package csdn;import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Scanner;import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;import com.alibaba.fastjson.JSONObject;import org.jsoup.Connection.Response;public class csdn {static Map<String, String> cookies;private static void dologin(String username, String password) throws IOException {String url = "https://passport.csdn.net/v1/register/pc/login/doLogin";Map<String, String> data = new HashMap<String, String>();data.put("loginType", "1");data.put("pwdOrVerifyCode", password);data.put("userIdentification", username);data.put("loginType", "1");data.put("uaToken", "");data.put("webUmidToken", "");String dataString = JSONObject.toJSONString(data);JSONObject JSON = JSONObject.parseObject(dataString);Connection con = Jsoup.connect(url).header("user-agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36").header("referer", "https://passport.csdn.net/login").header("origin", "https://passport.csdn.net").header("content-Type", "application/json;charset=UTF-8").header("x-requested-with", "XMLHttpRequest").header("accept", "application/json, text/plain, */*").header("accept-encoding", "gzip, deflate, br").header("accept-language", "zh-CN,zh;q=0.9").header("connection", "keep-alive").header("Host", "passport.csdn.net").header("Cookie", "").requestBody(JSON.toJSONString()).ignoreContentType(true)// 非常重要.maxBodySize(1000).method(Connection.Method.POST);System.out.println(JSON.toJSONString());Response response = con.execute();cookies = response.cookies();System.out.println(response.body());}public static void main(String[] args) throws IOException {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);System.out.println("輸入賬號:");String username = sc.next();System.out.println("輸入密碼:");String password = sc.next();dologin(username, password);} }


    如有錯誤請指教!
    如有問題可以Mark交流!

    • 如果對后端、爬蟲、數據結構算法等感性趣歡迎關注我的個人公眾號交流:bigsai

    總結

    以上是生活随笔為你收集整理的CSDN登录机制分析(附上python、java代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。