zoukankan      html  css  js  c++  java
  • 防刷票机制研究和.NET HttpRequest Proxy

    最近应朋友之约 测试他做的投票网站 防刷票机制能力如何,下面有一些心得和体会。

    朋友网站用PHP写的,走的是HttpRequest,他一开始认为IP认证应该就差不多了。但说实话这种很low,手动更换代理服务器手动刷都可以。但程序员的手就是程序,于是,

    首先先 百度到 一些 免费代理服务器,非常多网站分享这些。按一定格式来储存到TXT文件。

    第二步使用Fiddler来进行截取消息,拿到其http request header和body:

     

    第三步使用.NET HTTPREQUEST。逻辑是遍历代理txt里代理,伪造 fiddler监听到的request 消息(当然其中一些cookie和其他的细节需要改变根据不同情况讨论)

     _contentsList = File.ReadAllLines(@"C:\Proxy.txt");
                var contents = _contentsList.ToList();
    
                var proxy = string.Empty;
                var port = 0;
    
                foreach (var item in contents)
                {
                    new Thread(() =>
                    {
                        try
                        {
                            // 获取代理
                            var list = item.Split(':');
                            proxy = list[0];
                            port = Convert.ToInt32(list[1]);
    
                            // 伪造消息
                            var request =
                                (HttpWebRequest)
                                    WebRequest.Create(
                                        @"http://XXX.COM");
                            request.Proxy = new WebProxy(proxy, port);
                            request.UserAgent = @"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0";
                            request.Referer = @"http://XXX.COM";
                            request.Method = "GET";
                            request.Host = @"XXX.COM";
                            request.Accept = @"*/*";
    
                            request.Headers.Add(@"Accept-Language", @"zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
                            request.Headers.Add(@"Accept-Encoding", @"gzip, deflate");
                            request.Headers.Add(@"X-Requested-With", @"XMLHttpRequest");
                            var response = request.GetResponse();
                            Console.WriteLine(response.ToString());
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                        }
                    }
                    ).Start();
    

    然后我朋友发现这样的确问题很大,于是他采用了验证码验证模式,即首先服务器会发给你验证码,你发的request的uri里参数必须要包含相同的验证码。

    这种方式非常好,至少干掉了绝大多数的刷票软件。但我仍然想试验一下,这有一种battle的味道。哈哈

    其实这个逻辑来说就是一来一回。给我验证码图片,我识别出来,然后再发送就好了。难度就在于验证码的OCR。

    一开始我朋友验证码非常简单,就是几个数字,于是我直接使用最基础的OCR识别就干掉了。

    后来他加了噪点,OK,这个也没有问题。我们降噪,然后再识别,虽然机器学习需要一段时间,但正确率还是有一些的。

    最后他采用了随机产生汉字,我发现,汉字的OCR是个很麻烦的事情。这也是我下一步要研究的点,以后会出一篇关于OCR的文章。

    随后他说还会加入一些cookie验证什么的,到这里我觉得我朋友的网站现在算是挺完善了。然后我就问下我老大,如果是他,他会怎么来刷票。

    我老大回复非常简单,租人人工刷,随你技术怎样,我给他们两毛一票,你算算时间成本,完全划得来。

    虽然这可能就是他随口一说,但我有一些感悟。

    在IT这行,技术是根本,但商业运作和思维方式也是非常重要的。一个程序员假如只会编程,那就是工程师。假如程序员学了经济和管理,那也许就有机会成为袖珍版比尔盖茨。

    自己技术累积创造出自己的核心价值产品,然后商业运作进行市场化,这才是将价值转化为价钱的道路吧。

    自己也会走上这条路,技术上的累积和经济行业商业化的认知。越往后搞技术的纯粹性感觉就会越低,所以想告戒现在仍在努力的自己:

    且行且珍惜

    如果喜欢点个赞吧~
    提醒自己要减肥。这件事可比WINDOWS蓝屏要令人痛苦的多。 MSDN:Leon Chang 新浪微博 @木木_小九的学堂
    Top
    收藏
    关注
    评论
  • 相关阅读:
    App唤起微信小程序和回调
    微信小程序 — 自定义picker选择器弹窗内容+textarea穿透bug
    微信小程序的场景值scene
    微信小程序textarea层级过高(盖住其他元素)
    微信小程序如何修改本地缓存key中的单个数据
    微信小程序---查看更多的显示与隐藏
    微信小程序文字超过行后隐藏并且显示省略号
    Flutter 页面下拉刷新和上拉加载
    json转换成dart类 JSON to Dart
    Flutter 保持页面状态
  • 原文地址:https://www.cnblogs.com/xfuture/p/3677850.html
Copyright © 2011-2022 走看看