CSDN文章点赞、收藏、评论后到底发生了什么?简要分析HTTP交互机制

news2025/2/26 18:04:41

作者:Eason_LYC
悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。
一个人的价值,在于他拥有的,而不是他会的。所以可以不学无数,但不能一无所有!
技术领域:WEB安全、网络攻防
关注WEB安全、网络攻防。我的专栏文章知识点全面细致,逻辑清晰、结合实战,让你在学习路上事半功倍,少走弯路!
个人社区:极乐世界-技术至上
我们追求技术至上,这是我们理想中的极乐世界~(关注我即可加入社区)

文章目录

  • 1、为什么要写这篇文章
  • 2. CSDN点赞、收藏、评论的数据包分析
    • 2.1 点赞的前提是什么
    • 2.2当我们给文章点赞时会发生什么?
    • 2.3 我们收藏文章时会发生什么?
    • 2.4如何评论?
  • 3. 梳理总结
  • 4. 一键三连demo演示

1、为什么要写这篇文章

作为一名原创作者,非常关注点赞、收藏、评论数,这代表了作品的受欢迎程度,也是各位读者对我创作文章的实际反映。同时作为web安全领域的作者,DN兄实现这些功能的HTTP交互机制,也是要稍微看看的。
请添加图片描述
请添加图片描述

2. CSDN点赞、收藏、评论的数据包分析

只要是B\S架构的应用或网站,绝大部分都是通过数据报文实现交互(即TCP\IP),CSDN博客网站属于最为标准的web网站,对其进行分析,首先就要获取交互的数据包。
之前文章有过基础介绍:
web安全最亲密的战友Burp Suite—网络攻防常用工具介绍–burp suit工具初体验一
web安全最亲密的战友Burp Suite2–target模块体验)
B站视频
网络攻防常用工具介绍–burp suit工具初体验一
web安全最亲密的战友Burp Suite2–target模块体验

2.1 点赞的前提是什么

回想我们在网站上的操作流程,首先要登陆才能进行后续的点赞或者收藏评论,所以要先进行登陆。

  • 正常登陆验证
    正常用户操作很简单,就是输入用户名和密码。程序以POST方式将数据包发送到服务器中,经过各种验证再返回结果。
  • 保持登陆状态即cookie
    不可能在每个操作前都要用户输入账户密码,这样太繁琐,不会有任何商用网站会这样对待自己的用户。所以在第一次登陆成功后,浏览器和后台服务器间要保存一个“凭证”,用于证明这个用户已经通过验证。后续用户拿着这个“凭证”就可以操作各种功能。这个“凭证”就是cookie
    抓包查看cookie中一共有28个字段。

Cookie:
uuid_tt_dd=???;
log_Id_pv=???;
Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=???;
Hm_up_6bcd52f51e9b3dce32bec4a3997715ac=???;
Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=???;
log_Id_view=???;
log_Id_click=???;
ssxmod_itna=???;
ssxmod_itna2=???;
UN=???;
BT=???;
p_uid=???;
UserName=???; 重点关注这个字段
UserInfo=???;
UserToken=???; 重点关注这个字段
UserNick=???;
AU=???;
dc_session_id=1???;
c_pref=default;
c_ref=default;
c_dsid=???;
c_first_ref=default;
c_first_page=???;
c_segment=???;
dc_tos=???;
Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=???;
dc_sid=???;
c_page_id=default

  • 验证凭证,到底是验证cookie中哪个字段
    这是个复杂的问题,因为根据设计理念不同,实现功能不同,会验证不同的cookie字段。况且我们没有相关文档说明,无法一一明确各cookie字段确切含义,怎么办?
    其实换一种思路就会发现问题很简单,按可能性由大到小测试一下就可以。我们只要测试出一种组合能达到我们的目的就行。所以经过仅仅2次测试就找到了cookie中证明你登录状态的两个字段
    • UserName
    • UserToken

登陆自己的账户,抓包将自己cookie中的这两个字段值保存下,方便以后使用

 设置个人账户信息,用于保持登陆状态
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
    Chrome/105.0.0.0 Safari/537.36'   # 设置一个正常的浏览器User-Agent值,比较稳妥
}
cookies = {
    'UserName': '我的csdn账户id',
    'UserToken': 'ni_ke_yi_cai_cai'
}

OK,现在保持登陆的问题解决了,下面我们继续分析。

2.2当我们给文章点赞时会发生什么?

实际操作并抓包就会看到大量数据包,经过删选发现关键的一个POST数据包。
请添加图片描述
这个数据包报文主要内容如下(为了方便查看,不太重要的字段已经删除,敏感信息进行了处理)

POST //phoenix/web/v1/article/like HTTP/2
Host: blog.csdn.net
Cookie: UserName=eason612; UserToken=ni_ke_yi_cai_cai; 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: https://blog.csdn.net
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers

articleId=126951795     

看到这个数据包,可以很清晰的知道
点赞就是向链接https://blog.csdn.net/phoenix/web/v1/article/like,发送一个POST数据包,数据包内容为文章ID(articleId)
那么articleId如何获取?
其实只要细心就能发现,所有的文章点击进去,它的链接都是https://blog.csdn.net/用户名/article/details/126793183
这一串数字就是articleId,就是每个文章唯一的标识ID
请添加图片描述

所以这个数据包所有需求,我们都能满足,是否就可以点赞呢?测试下就知道了。在此使用工具Apifox(一个非常流行的接口测试工具,感觉要比postman好用)
完整的测试数据包如下:
请添加图片描述

请添加图片描述
后台响应结果成功,我们再用浏览器访问对应文章,查看实际结果
请添加图片描述
成功!

2.3 我们收藏文章时会发生什么?

同样的思路,在收藏文章中,查看大量数据包时发现两个关键POST报文

  1. https://mp-action.csdn.net//interact/wrapper/pc/favorite/v1/api/folderListWithCheck
    这个报文的响应如下:返回一个json数据,查看后发现是本人所有的收藏夹明细,内容很多,最重要的就是每个收藏夹对应的id

{“code”:200,“msg”:“success”,“total”:0,“data”:{“result”:[{“Description”:“eason612的默认收藏夹”,“Username”:“eason612”,“FavoriteNum”:1712,“CreatedAt”:“2022-05-14T12:03:11.000+0000”,“CheckStatus”:0,"ID":16557983,“IsPrivate”:1,“FollowNum”:0,“UpdatedAt”:“2022-09-30T23:36:04.000+0000”,“Name”:“默认收藏夹”}…],“total”:9}}

  1. https://mp-action.csdn.net/interact/wrapper/pc/favorite/v1/api/addFavorite
    请添加图片描述

请求包字段分析

  • url: 文章的标准完整链接

无论之前是短链接或是其他形式的链接,在跳转解析后,均会访问到这个标准样式的链接,格式为
https://blog.csdn.net/文章作者的ID/details/文章ID(articleId)
另外,在访问到指定文章页后,返回的大量数据中都能找到接下来分析的字段值

  • source:来源,一般均为blog
  • sourceId:和上面url链接的最后数字一致,其实就是上文说的文章ID(articleId)
  • author:被收藏文章的作者id
  • title:被收藏文章的标题
  • description:被收藏文章的描述。创作过文章的小伙伴都知道,发布前要填写的描述信息就在这里
  • fromType:来源类型,电脑端就默认为PC
  • username:操作者的本人id(登陆用户的id,上文提到的cookie中的username)
  • folderId:文件夹的id,就是上一个重要post数据包中返回的ID字段,用于指定收藏到哪个收藏夹中

响应报文字段分析

内容很多,但均是重复的,仅有一个字段表明是否收藏成功,值得关注。

  • msg:如是success则收藏成功,其他值则失败。

经过上述分析,发现收藏流程异常简单:
收藏就是向链接https://mp-action.csdn.net/interact/wrapper/pc/favorite/v1/api/addFavorite,发送一个POST数据包,数据包内容为json

{
"url":"标准url",
"source":"blog",
"sourceId":"文章ID(articleId)",
"author":"被收藏文章的作者id",
"title":"被收藏文章的标题",
"description":"被收藏文章的描述",
"fromType":"PC",
"username":"登陆状态账户ID",
"folderId":"收藏夹id",
"newFolderName":""
}

以上这些字段值,在访问到指定文章页中(查看html页面源码),相对固定的位置处都能找到对应字段值,有兴趣的小伙伴可以利用脚本自动抓取这些内容。本文仅解析数据包,不在此点展开。

分析完,就来使用Apifox实际测试下
请添加图片描述
请添加图片描述
请添加图片描述
测试成功!

2.4如何评论?

Let’s go! 下一个功能是评论,继续抓包查看,果然发现关键POST数据包
https://blog.csdn.net/phoenix/web/v1/comment/submit

POST /phoenix/web/v1/comment/submit HTTP/2
Host: blog.csdn.net
Cookie: 此处省略一万字
Referer: XXX
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 120

commentId=&content=%E6%96%87%E7%AB%A0%E5%BE%88%E6%A3%92%EF%BC%8C%E6%94%AF%E6%8C%81%E5%8D%9A%E4%B8%BB&articleId=126951795

header中没有特别的,body中有些内容

  • commentId:评论ID 保持默认为空即可
  • content:评论具体内容,是经过了url编码的内容
  • articleId:文章ID,这个就非常熟悉了

没有新的内容了

需要注意的是,在测试时发现对评论有多项限制

  1. 评论每天有数量限制
  2. 对于评论有速度限制,过快的话,虽然响应成功,但是实际上没成功。
  3. 评论太短、一个账户对不同文章的评论不能完全相同,评论内容与文章无关,这些情况多次发生均会触发相关机制
  4. 其他用户举报,导致一段时间内不能发布评论
  5. VIP用户与非VIP用户在HTML源代码中class类命名和取值略有不同。

有了之前描述,会发现评论异常简单。

3. 梳理总结

经过上面的分析,点赞、收藏、评论的流程其实非常简单。

首先判断是否处于登陆状态(就是验证cookie),满足则可以执行后续任务。其次对于点赞、收藏和评论仅需要满足特定数据包的字段和值,只需保持填写正确。最后要注意评论条件,触发的话会造成数据包无论返回什么信息,实际页面上会发生js拦截或其他异常情况,造成失败。

  1. 登陆状态保持:设置特定cookie
    UserName: '我的csdn账户id',
    UserToken: 'ni_ke_yi_cai_cai'

  2. 点赞
    [POST] https://blog.csdn.net/phoenix/web/v1/article/like
    body: articleId=文章ID

    Content-Type: application/x-www-form-urlencoded; charset=UTF-8

  3. 收藏
    [POST] https://mp-action.csdn.net/interact/wrapper/pc/favorite/v1/api/addFavorite
    body: JSON

    {
    “url”:“标准url”,
    “source”:“blog”,
    “sourceId”:“文章ID(articleId)”,
    “author”:“被收藏文章的作者id”,
    “title”:“被收藏文章的标题”,
    “description”:“被收藏文章的描述”,
    “fromType”:“PC”,
    “username”:“登陆状态账户ID”,
    “folderId”:收藏夹id,
    “newFolderName”:“”
    }

  4. 评论
    [POST] https://blog.csdn.net/phoenix/web/v1/comment/submit
    body: commentId=&content=你的任意评论&articleId=文章ID

    Content-Type: application/x-www-form-urlencoded; charset=UTF-8

4. 一键三连demo演示

演示脚本仅用于本文的分析验证

CSDN文章点赞、收藏、评论后到底发生了什么?简要分析HTTP交互机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

node.js是干什么的

一、Node.js简介 Node.js是一个开源和跨平台的JavaScript运行时环境。它几乎是任何类型项目的流行工具! Node.js在浏览器之外运行V8 JavaScript引擎(Google Chrome的内核)。这使得Node.js的性能非常好。 Node.js应用程序在单个程序中运行&…

使用SpringBoot一小时快速搭建一个简单后台管理(增删改查)(超详细教程)

最近也是临近期末了,各种的期末大作业,后台管理也是很多地方需要用到的,为了方便大家能快速上手,快速搭建一个简单的后台管理,我花了两天时间整理了一下 我会从0开始介绍,从数据库的设计到前端页面的引入最…

使用uniapp开发APP时的调试/安卓打包等

一、调试 1.先用数据线连接电脑和手机,选择“文件传输”, 2.打开开发者模式,华为手机举列-->设置-->关于手机-->版本号,多次连续点击“版本号”,就会提示已打开 开发者模式 3.华为手机举列-->设置-->…

Vue:element-ui中表格过长内容隐藏显示

一、el-table表格 在使用VUE显示后台数据时,经常会遇到数据过长,显示出来的效果很难看,如下图所示: 上图中,红框框出的内容由于长度过长,占据了三行空间,如果内容更多的话,占据行数就…

基于WEB的网上购物系统的设计与实现(附:源码 论文 sql文件)

摘 要 随着计算机网络技术的飞速发展和人们生活节奏的不断加快,电子商务技术已经逐渐融入了人们的日常生活当中,网上商城作为电子商务最普遍的一种形式,已被大众逐渐接受。因此开发一个网上商城系统,适合当今形势,更加…

【Windows Server 2019】Web服务 IIS 配置与管理—— IIS 的安装与基本配置 Ⅲ

目录4. 安装 IIS 服务器5. IIS 的基本配置5.1 绑定 IP参考资料关联博文4. 安装 IIS 服务器 准备工作:选择一台服务器作为WEB-IIS服务器,IP地址为192.168.82.208。 在Windows Server 2019系统中,IIS角色是可选组件,默认情况下是没…

Nginx之负载均衡upstream模块简介和使用

一、upstream模块简介 Nginx的负载均衡功能依赖于ngx_http_upsteam_module模块,所支持的代理方式包括proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass和grpc_pass。ngx_http_upstream_module模块有允许Nginx定义一组或多组服务组,使用…

在 vue eslint 报错 error “Component name “*****“ should always be multi-word”,该怎么办?

目录 出现的问题: 报错的原因: 解决方案: 方案一 :重命名(亲测有效) 方案二 :配置 vue.config.js 文件(网上方法,本人使用无效) 方案三 :配置 .eslintrc.js文件&a…

css设置渐变色

css如何设置自定义渐变色?线性渐变篇 CSS渐变可以让你在两个或多个指定颜色之间显示平滑的过渡 CSS定义了三种渐变类型: Linear Gradients (goes down/up/left/right/diagonally) 下降/ 上升/左/右/对角线Radial Gradients (defined by their center) 由中心定义…

SpringBoot整合WebSocket实现后端向前端发送消息

目录 一、什么是 websocket 接口 二、适用场景 三、示例代码 3.1、添加pom.xml依赖 3.2、创建WebSokcet配置类 3.3、创建测试发送消息接口 3.4、测试webSocket(http://www.jsons.cn/websocket/) 一、什么是 websocket 接口 使用 websocket 建立长连…

vue中的render函数(通俗、易懂)

文章目录一、初步认识render函数二、为什么使用render函数三、render函数的解析一、初步认识render函数 import Vue from vue import App from ./AppVue.config.productionTip falsenew Vue({el: #app,render: h > h(App) })在使用脚手架创建vue项目的过程,我们…

纯前端文档预览,还要支持所有主流格式,有这一篇就足够了

写在前面 纯前端的文档预览功能,是非常常见的需求,但就是这么简单的需求,难住了许多可爱的小伙伴们。别急,先访问一下解决方案,给你一个惊喜,再往下看: 文件在线预览DEMO 服务器文件预览DEMO …

【计算机网络】Web服务器的配置

目录 课题描述 需求分析 2.1 WEB服务器基本构架 2.1.1 WEB服务器和浏览器 2.2 HTTP协议 2.2.1 HTTP简介 2.2.2 HTTP工作原理 2.3 FTP协议 2.3.1 FTP简介 2.3.2 FTP工作原理 2.4 ISS服务作用 概要设计 3.1 ISS服务器的安装与配置 3.2 详细设计 结果分析 4.1 We…

JS实现轮播图(一看就懂逻辑清晰)

轮播图有很多种实现方法,这是其中一种最清晰的方法。思路很清晰,代码很简单,欢迎大佬多指教。 先来看下效果图,嫌麻烦就不用具体图片来实现了,主要是理清思路。(自动轮播,左右按钮切换图片&…

Vue首屏加载过慢出现白屏的六种优化方案

公司业务展示官网开发,构建版本后在测试环境下,发下首屏加载损耗高达几十秒(服务器在国外,所以也导致加载时间变长),于是采用了以下方法来达到提速目的。 1. 采用懒加载的方式 路由懒加载和组件懒加载&a…

【Node.js】初识Node.js

系列文章目录 文章目录系列文章目录一、什么是 Node.js二、下载和安装 Node.js1、普通方式2、使用 nvm 安装三、Node.js 和 JavaScript 的区别1、ECMScript2、JavaScript3、node.js四、commonjs1、什么是 commonjs2、安装 lodash五、debugger六、server 开发和前端开发的区别一…

Vue3实战教程(快速入门)

Vue3实战教程(快速入门)前言1.搭建脚手架1.1 创建项目1.2 清除多余文件,创建干净项目1.3 创建登录页面2.创建404页面(引入sass)2.1 引入sass2.2 创建404页面3.构建登录注册页面(引入element-plus&#xff0…

VSCode安装配置使用教程(最新版超详细保姆级含插件)一文就够了

前言 Visual Studio Code 是一个轻量级功能强大的源代码编辑器,支持语法高亮、代码自动补全(又称 IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和 Git 版本控制系统。适用于 Windows、macOS 和 Linux。它内置了对…

如何解决Vue3没有代码提示问题?

在上一篇笔记中提到了Vue3viteTs写代码过程中,出现的代码自动补全失效功能,今天来谈谈如何解决这个问题。 首先,我们已经很明确的就是安装了volar插件之后,HTML标签片段补全已经失效,即在template中书写HTML标签时&am…

IDEA2022版本创建maven web项目(两种方式)最全图文教学

IDEA2022版本创建maven web项目 问题发生时间:2022.1.3 问题描述:新版本的idea2022很多人不解的地方就是创建项目之后没有Web文件夹,这让项目创建的过程中产生了困难 提示:环境搭建的过程中请注意细节问题,避免粗心大…