防止恶意注册和暴力破解

1验证码
2token令牌。(同理随机input的name )

Java代码  

  1. <?php  
  2. session_start();  
  3.   
  4. if ($_POST["submit"] == "go") {  
  5.     //check token  
  6.     if ($_POST["token"] == $_SESSION["token"]) {  
  7.         //continue processing….  
  8.     } else {  
  9.         //stop all processing! remote form posting attempt!  
  10.     }  
  11. }  
  12. $token = md5(uniqid(rand(), true));  
  13. $_SESSION["token"] = $token;  
  14. ?>  
  15. <form action="" method="post">  
  16.     <p><label for="name">Name</label>  
  17.         <input type="text" name="name" id="name" size="20″ maxlength="40″/></p>  
  18.         <input type="hidden" name="token" value="<?php echo $token; ?>"/>  
  19.     <p><input type="submit" name="submit" value="go"/></p>  
  20. </form>  

3. 提交前客户端加密后台解密(如加密2中的token)http://hudeyong926.iteye.com/blog/1594892

 

4 IP及IP段进行访问限制

Java代码  

  1. <?php  
  2. $oblock_ip = new block_ip();  
  3. $boolean = $oblock_ip->checkip();  
  4. class block_ip {  
  5.     var $block_ip = array("192.168.1.1","210.10.2.1-20","222.34.4.*");  
  6.   
  7.     function __construct(){  
  8.     }  
  9.   
  10.     function __destruct(){  
  11.     }  
  12.   
  13.     private function makepregip($str){  
  14.         if (strstr($str,"-")) {  
  15.             $aip = explode(".",$str);  
  16.             foreach ($aip as $k=>$v) {  
  17.                 if (!strstr($v,"-")) {  
  18.                     $preg_limit .= makepregip($v);  
  19.                 }       else{  
  20.                     $aipnum = explode("-",$v);  
  21.                     for($i=$aipnum[0];$i<=$aipnum[1];$i++){  
  22.                         $preg .=$preg?"|".$i:"[".$i;  
  23.                     }  
  24.                     $preg_limit .=strrpos($preg_limit,".",1)==(strlen($preg_limit)-1)?$preg."]":".".$preg."]";  
  25.                 }  
  26.             }  
  27.         }else{  
  28.             $preg_limit .= $str.".";  
  29.         }  
  30.         return $preg_limit;  
  31.     }  
  32.   
  33.     private function getallblockip(){  
  34.         if ($this->block_ip) {  
  35.             foreach ($this->block_ip as $k=>$v) {  
  36.                 $ipaddres = $this->makepregip($v->start_ip);  
  37.                 $ip = str_ireplace(".","\.",$ipaddres);  
  38.                 $ip  = str_replace("*","[0-9]{1,3}",$ip);  
  39.                 $ipaddres  = "/".$ip."/";  
  40.                 $ip_list[] = $ipaddres;  
  41.             }  
  42.         }  
  43.         return $ip_list;  
  44.     }  
  45.   
  46.     public function checkip() {  
  47.         $iptable = $this->getallblockip();  
  48.         $isjoined = true;  
  49.         //取得用户ip  
  50.         $ip = $this->get_client_ip();  
  51.         $ip = trim($ip);  
  52.         //剔除黑名单中的ip区段  
  53.         if ($iptable) {  
  54.             foreach($iptable as $value) {  
  55.                 if (preg_match("{$value}",$ip)) {  
  56.                     $isjoined = false;  
  57.                     break;  
  58.                 }  
  59.             }  
  60.         }  
  61.         //如果在ip黑名单中就执行如下操作  
  62.         if( !$isjoined ){  
  63.             echo "ip error";  
  64.             exit;  
  65.         }  
  66.     }  
  67.   
  68.     private function get_client_ip(){  
  69.         if (getenv("http_client_ip") && strcasecmp(getenv("http_client_ip"), "unknown"))  
  70.             $ip = getenv("http_client_ip");  
  71.         else if (getenv("http_x_forwarded_for") && strcasecmp(getenv("http_x_forwarded_for"), "unknown"))  
  72.             $ip = getenv("http_x_forwarded_for");  
  73.         else if (getenv("remote_addr") && strcasecmp(getenv("remote_addr"), "unknown"))  
  74.             $ip = getenv("remote_addr");  
  75.         else if (isset($_server['remote_addr']) && $_server['remote_addr'] && strcasecmp($_server['remote_addr'], "unknown"))  
  76.             $ip = $_server['remote_addr'];  
  77.         else  
  78.             $ip = "unknown";  
  79.         return($ip);  
  80.     }  
  81.   
  82. }  
  83. ?>  
时间: 2024-08-29 07:16:02

防止恶意注册和暴力破解的相关文章

解决PJBlog3 V3.2博客给恶意注册问题 修复验证bug

前天发现博客会员数增加了很多,查了下,很多属于恶意注册用户并且已持续了几个月: 搜索IIS日志,能查到对应的POST信息: 引用内容 2014-12-18 07:29:05 W3SVC179938905 42.121.105.222 POST /register.asp - 80 - 178.43.73.53 Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/27.0.1453.116+Safar

安全科普:什么是暴力破解攻击?如何检测和防御?

众所周知,iCloud艳照门其实并不高明,黑客通过暴力破解攻击不断尝试登录用户的账号名和密码,最终获取好莱坞明星的iCloud账号.什么是暴力破解攻击?怎样检测暴力破解攻击以及怎样防护呢? 什么是暴力破解攻击? 暴力破解攻击是指攻击者通过系统地组合所有可能性(例如登录时用到的账户名.密码),尝试所有的可能性破解用户的账户名.密码等敏感信息.攻击者会经常使用自动化脚本组合出正确的用户名和密码. 对防御者而言,给攻击者留的时间越长,其组合出正确的用户名和密码的可能性就越大.这就是为什么时间在检测暴力

勒索病毒恐难暴力破解 国内比特币平台尚买币潮

5月12日晚间,WannaCry(又称Wanna Decryptor)蠕虫病毒在全球超过74个国家爆发,已有至少4.5万台机器受到感染,我国部分高校网络系统沦为重灾区,中石油加油站网络支付系统也受到影响. 网络安全专家张瑞东向<每日经济新闻>记者介绍,该病毒是利用windows系统445端口的漏洞,可在局域网内快速传播,而学校等大型局域网没有做类似防范,因此成为攻击目标. 病毒要求被入侵者在六个小时内缴付300美元价值的比特币赎金,随后每隔一段时间赎金上涨一次."截至目前,我们平台还

wordpress博客如何有效防范暴力破解

wordpress博客如果开放投稿注册并且后台支持用户名登录的话,可以先在前台页面批量获取用户名,然后找个弱口令字典,就可以暴力破解了 批量获取用户名的方法是遍历author页面,从html中提取authorname 以携程UED博客为例: 1.author页面地址为:http://ued.ctrip.com/blog/?author=1 ,ID是自增的     红色圈内即用户名admin. 2.登录页面http://ued.ctrip.com/blog/xmlrpc.php xmlrpc登录接

防止暴力破解Win8系统密码的方法

  1.使用图片密码登录windows8系统时,可以先将鼠标指针移动到屏幕右侧,弹出Charms控制面板,选择"设置"选项后,按下最下方位置的"更改电脑设置"按钮,进入电脑设置更改页面.从该页面的左侧列表中,点击"用户"标签. 2.其次在该页面的"登录选项"位置处,点击"创建图片密码"按钮,弹出图片密码创建向导对话框,按照提示首先输入旧的登录密码,再选择一种自己很熟悉的图片,建议大家尽量选用比较规整的,或者

如何用shell防止邮件暴力破解

邮箱服务器是放在内网映射的公司IP,开放端口后,一直被不停的暴力破解,郁闷死了.其中有个IP 有6W多次啊:从而利用脚本屏蔽IP访问. 1.脚本如下: #! /bin/bash# author: kuangl# mial: kuangl@orient-media.com# date: 2013-05-04source /etc/profileawk -F"[" '/disconnect from unknown/ {print $NF}' /var/log/maillog |grep

如何使用denyhost来防止ssh暴力破解

关于ssh的登录,作为一个合格的linux运维人员大家都是熟悉不能在熟悉的了,我们都知道,计算机本身暴露在互联网上就是危险的,当然我们不要因为我们的业务少,用户量不多而有侥幸心理,掉以轻心:互联网的大多数攻击都是没有目的性的,黑客大神们通过大范围的IP端口扫描探测到可能存在的漏洞bug主机,然后通过自动扫描工具来进行破解,那么我们来怎么防止黑客的大神暴力破解,要么自己手动的写防止暴力破解的脚本+任务计划来实施,要么通过开源软件来完成,Denyhost正是这样的一款工具,Denyhosts是一个L

centos下防止暴力破解ssh

centos rhel下如下 #! /bin/bash cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /root/black.txt cat /var/log/secure|awk '/Invalid user/{print $NF}'|sort|uniq -c|awk '{print $2"="$1;}' >> /tm

php利用验证码防止恶意注册学习笔记

 今天我们来研究下PHP验证码,我们通过简单的数字验证码来实现,首先来写一个生成验证码的代码:  代码如下   <?php //随机生成一个4位数的数字验证码 $num="";     for($i=0;$i<4;$i++){     $num .= rand(0,9);     } //4位验证码也可以用rand(1000,9999)直接生成 //将生成的验证码写入session,备验证页面使用 Session_start();     $_SESSION["C