이 단계에서는 WeChat Moments에서 끝없는 투표 활동이 진행됩니다. 많은 학생들이 이미 이로 인해 짜증을 내고 있다고 생각합니다. 왜냐하면 사람들(친척, 친구 등)이 항상 나타나 투표를 요청하기 때문입니다.
이 기사에서는 이 문제를 도덕적 또는 감정적 수준에서 탐구할 의도가 없습니다. 제가 관심을 두는 점은 현재 대부분의 투표 활동에는 실제로 명백한 허점이 있으며 "투표 조작"이 간단한 기술적 수단을 통해 달성될 수 있다는 것입니다.
여기에 예가 있습니다.
한 온라인 미용실(이하 S몰)이 위챗 플랫폼에서 온라인 투표 이벤트를 진행했다. 위챗 이용자들은 이벤트 링크를 통해 투표 페이지에 접속해 자신이 좋아하는 헤어스타일리스트의 작품에 투표할 수 있으며, 각 위챗 계정에서만 캐스트에게 투표할 수 있다. 한 작품에 1표를 주세요.
투표 활동 페이지는 다음과 같습니다.
표면적으로 S Mall은 각 WeChat 사용자가 하루에 한 번만 투표할 수 있도록 제한되어 있기 때문에 이미 투표 활동에 대한 부정 행위 방지 조치를 시행했습니다. 사용자들이 정상적으로 위챗을 통해 본 투표 서비스에 접속하여 투표를 한다면, 실제로 원하는 효과를 얻을 수 있을 것입니다.
다만, 투표 페이지의 원래 주소를 보면, 즉 페이지를 누른 상태에서 아래로 드래그하면 화면 상단에 "XXX에서 제공하는 웹페이지입니다."라고 표시되어 있는 것을 확인할 수 있습니다. 여기서 "XXX"는 "mp.weixin.qq.com"이 아니라 S Mall의 도메인 이름입니다. 즉, 이번 투표 활동을 위한 프로그램이 S몰 서버에서 실행되고 있는 것이다.
위의 분석을 바탕으로 사용자 투표 작업의 네트워크 토폴로지 다이어그램은 다음과 같아야 한다고 추론할 수 있습니다.
WeChat 사용자가 투표 페이지에 접속하면 WeChat 서버는 요청만 전달하며, 구체적인 투표 집계 및 확인은 S Mall 서버에서 수행됩니다.
그렇다면 S몰은 투표 이용자를 어떻게 구별하는가?
여기에는 WeChat 공개 플랫폼 OpenID
의 개념이 포함됩니다. OpenID
에 대한 공식적인 설명은 다음과 같습니다. WeChat ID를 암호화한 후 각 공식 계정에 대한 각 사용자의 OpenID는 고유합니다.
이를 확인하는 것은 쉽습니다. 투표하려면 여러 WeChat 계정을 사용하고, 투표 과정에서 네트워크 패킷을 캡처하고, POST에서 매개변수를 확인하면 됩니다.
이를 기반으로 WeChat 공개 플랫폼은 투표 요청을 전달할 때 POST 매개변수에 사용자의 OpenID
포함시킵니다. S Mall은 투표 POST 요청을 받은 후 현재 OpenID
해당 날짜에 투표했는지 쿼리하여 단일 투표를 방지할 수 있습니다. 사용자가 반복적으로 투표했습니다.
그러나 여기에는 큰 허점이 있습니다!
S몰에서는 OpenID
중복 여부만 판단할 수 있으나, OpenID
확인을 위해 WeChat 서버를 호출할 수 없기 때문에 OpenID
의 유효성을 확인할 수 없습니다.
이 허점을 명확히 한 후에는 티켓 브러싱을 달성하는 것이 매우 간단합니다.
OpenID
매개변수를 무작위로 생성하고 POST 요청을 반복합니다.티켓 일괄 브러싱이나 자동화된 티켓 브러싱 작업을 구현하려는 경우 Python 스크립트를 통해 티켓 브러싱 요청을 구현할 수 있으며 LoadRunner를 사용할 수도 있습니다.
VoteRobot.py
실행하면 출력 로그는 다음과 같습니다.
======== Start to vote zpid(38), Total votes: 3
1 tickets has been voted, the next ticket will be voted after 35 seconds.
2 tickets has been voted, the next ticket will be voted after 31 seconds.
3 tickets has been voted, the next ticket will be voted after 10 seconds.
======== Voting Ended!
티켓 브러싱을 자동화할 때는 일반적으로 임의의 시간 간격을 갖는 것이 가장 좋으며, 다양한 장치를 동적으로 시뮬레이션하는 것이 가장 좋습니다. 즉, User-Agent
수정하는 것이 가장 좋습니다. 그렇지 않으면 서버가 부정 행위 행위를 쉽게 식별할 수 있습니다.
이것을 보고 일부 학생들은 은밀히 기뻐할 수도 있습니다. 이 방법을 향후 투표에서 "스와이프 투표"에 사용할 수 있습니까?
슬프게도 물론 그렇지 않습니다.
실제로 이 글에서 언급된 사례의 허점은 매우 낮은 수준이지만, 여전히 이 모델을 사용하는 투표 활동의 비율이 높습니다.
투표 캠페인이 이런 식으로 속일 수 있는지 여부도 쉽게 알 수 있습니다. 이 글의 방법을 사용하면, 이벤트의 URL이 공식 WeChat이 아니고, 전체 투표 과정에서 추가적인 검증이 없다면, 부정 행위의 가능성이 매우 높으며, 통신 상호 작용 과정을 확인하기 위해 패킷을 캡처합니다. 네트워크 요청 도구의 매개변수를 수정하고 다시 요청한 후 실제로 부정행위가 가능한지 확인할 수 있습니다.
또한 온라인 투표 활동에서 '투표 조작'을 방지하는 것이 불가능합니까?
대답은 그것을 완전히 제거하는 것이 실제로 어렵다는 것입니다. 12306 스캘퍼에 대해 들어보신 적이 있나요? Apple Store에서 전문적으로 앱 순위를 매기는 것에 대해 들어보신 적이 있나요? "인터넷 트롤"과 "50센트 파티"에 대해 들어보신 적이 있나요?
그러나 이벤트 주최자는 부정행위에 대한 기준을 크게 높이기 위해 몇 가지 수단을 사용할 수 있습니다. 예를 들어, 현재 많은 활동에서는 다음 방법을 사용합니다.
이 두 가지 방법 중 어떤 방법을 사용하더라도 이 기사의 "투표 브러싱" 방법은 전혀 효과적이지 않습니다.