账号登录只是 Cookie 的用途之一,事实上这种将匿名访问转为“实名”访问的技术无处不在。当你浏览网页时,服务器可以分配各种账号无关的 Cookie 来收集及追踪网页浏览。不过这个“实名”是客户端,就是说服务器可以知道是什么客户端浏览了什么内容。是机器层面的,不是人的身份。当有多个账号登录网站时,服务器就会分配多个 Cookie,如果这些 Cookie 信息均泄露,那么获得者就可以同时冒用多个账号的身份和网站交互,制造一些有趣的事情。

It's about the network
机器多账号评论

前面的几篇博文已经分享过监听网络通讯以及数据包分析方面的内容,Cookie 等信息的获取和数据交互逻辑这里就不再重复了,直接使用 Cookie 信息冒用多账号伪造请求和网站进行数据交互。又是新浪,下一次我尽量不用新浪来实际演示。

下面的 PowerShell 脚本代码使用 4 个账号的 Cookie 伪造请求对一篇新闻发送评论。同样的,代码中已经删除了一些信息(用“…”来代替),意在展示原理。和前面的脚本代码有点不同,这里不用 Process 创建进程来运行外部程序,也没有重定向进程的输入输出,而是使用命令行来处理。区别是之前的可以异步,而下面的则是阻塞(流程化处理)。对于异步、多任务、复杂逻辑,编写程序实现好点。

# Automated comment script for news.sina.com.cn
# Updated: 2018.10.20

$header_referer = 
'"Referer: http://...news.sina.com.cn/comment/skin/default.html?channel=kj&newsid=..."'

# 账号的 Cookie 信息,每个元素是一个账号的 Cookie
[string[]]$header_cookies = 
'"Cookie: ... ..."', `
'"Cookie: ... ..."', `
'"Cookie: ... ..."', `
'"Cookie: ... ..."'

$post_data_blank = 
'"channel=kj&newsid= ... &content= ... ... &callback= ..."'

$uri_comment = 
"http://...news.sina.com.cn/cmnt/submit"

# Settings
$comment_interval = 15
$comment_content = Get-Content -Path `
"...utf8.txt" -Encoding "UTF8"

$curl_exe = 
"...\Curl\curl-7.61.1-win64\bin\curl.exe"

foreach ($comment_line in $comment_content) {
    $comment_bytes = [System.Text.Encoding]::UTF8.GetBytes($comment_line)
    $comment_data = [BitConverter]::ToString($comment_bytes).Replace("-","%")
    $post_data = $post_data_blank.Replace("&content=", "&content=%" + $comment_data)
    
    #随机选择账号
    $comment_user = Get-Random -Minimum 0 -Maximum ($header_cookies.Count-1)
    $header_cookie = $header_cookies[$comment_user]

    # Block
    cmd /c $curl_exe --silent ... --data $post_data $uri_comment

    Write-Host `n
    Start-Sleep -Seconds $comment_interval
}

Write-Host ("Completed. " + (Get-Date))

foreach 循环每次读取一行评论文本,转换为可发送数据,随机选择一个账号(见临时附加的中文注释)发送评论。从而达到一种“多人接力讲话”的效果。当然,评论的内容、时间等参数也可以有更多的想象。

这段脚本功能稳定,也可以持续运行很久,但是专业的开发者一眼就能发现问题。那就是频繁的进程创建和销毁(cmd /c),可能会增加内存碎片,导致系统的运行效率下降。

It's about the network
机器多账号评论

回到开头提到的“实名”访问,可以说 Cookie 也只是“实名”访问的方案之一,除了 Cookie 之外还有其他的手段来追踪用户(客户端)收集信息。用收集到的用户(客户端)数据,为进一步的生意做准备。例如,当你浏览过或者聊过一些内容后,类似的内容在某一天就会主动的出现。

且不说这些内容主动出现时,它是让人惊喜的,还是让人反感的。所有“自以为是”的推荐都要基于一个大前提:人与机器是一种绑定关系,机器层面的数据可以用来推理人。然而,这个前提是否完全正确,那是个问号。

参考数据:新浪新闻评论(网站、新闻、评论均为“素材”,不代表本人观点)
参考资料:Cookie https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
本文代码仅供参考