作者: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站视频:
这个数据包报文主要内容如下(为了方便查看,不太重要的字段已经删除,敏感信息进行了处理)
POST //phoenix/web/v1/article/like HTTP/2Host: blog.csdn.netCookie: 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.0Accept: application/json, text/javascript, */*; q=0.01Content-Type: application/x-www-form-urlencoded; charset=UTF-8Origin: https://blog.csdn.netSec-Fetch-Dest: emptySec-Fetch-Mode: corsSec-Fetch-Site: same-originTe: trailersarticleId=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报文
- 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}}
- 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/2Host: blog.csdn.netCookie: 此处省略一万字Referer: XXXContent-Type: application/x-www-form-urlencoded; charset=UTF-8Content-Length: 120commentId=&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,这个就非常熟悉了
没有新的内容了
需要注意的是,在测试时发现对评论有多项限制
- 评论每天有数量限制
- 对于评论有速度限制,过快的话,虽然响应成功,但是实际上没成功。
- 评论太短、一个账户对不同文章的评论不能完全相同,评论内容与文章无关,这些情况多次发生均会触发相关机制
- 其他用户举报,导致一段时间内不能发布评论
- VIP用户与非VIP用户在HTML源代码中class类命名和取值略有不同。
有了之前描述,会发现评论异常简单。
3. 梳理总结
经过上面的分析,点赞、收藏、评论的流程其实非常简单。
首先判断是否处于登陆状态(
就是验证cookie
),满足则可以执行后续任务。其次对于点赞、收藏和评论仅需要满足特定数据包的字段和值
,只需保持填写正确。最后要注意评论条件
,触发的话会造成数据包无论返回什么信息,实际页面上会发生js拦截或其他异常情况,造成失败。
登陆状态保持:设置特定cookie
UserName: '我的csdn账户id',
UserToken: 'ni_ke_yi_cai_cai'
点赞
[POST] https://blog.csdn.net/phoenix/web/v1/article/like
body: articleId=文章ID
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
收藏
[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”:“”
}评论
[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交互机制