php 防止恶意注册的程序代码

网站开放注册的时候有一些渣渣就喜欢乱搞我们的网站。使我们站长们 都是蛋疼无比。所以就去百度找了找防止恶意注册。一般都是加验证码。但是会网页的人一般都是在你的要提交的那个页面利用url传参数。在写入数据的文件没有写好 就很容易被利用了! 所以我得出了2个解决方法

例子、

1.在提交的时候获取客户端IP 在IP第二次访问或者第三次提交数据的时候视为恶意提交

2.使用session访问2次或者3次 视为恶意注册

以下是代码:

 代码如下 复制代码

<?php
 $cs = $_SESSION['cs'] = $_SESSION['cs']+1;//每访问一次加1
 $sql = "INSERT INTO ".$DB_PREFIX."user (username,password,nickname,role,photo,email,description) VALUES ('$username','$password','$user_namex','writer','','$name_mailbox','')";
 if($cs < "2"){//页面被反复刷新的时候 不执行代码
 if( mysql_query($sql) == 1){?>
 <script language="javascript" type="text/javascript"> 
location.href='cache.php';
</script>
 <?php }}else{echo "警告别恶意注册!"; } ?>

当然这个办法也不是很好的。但是目前就感觉这个比较好了

例子、

比较高级的办法RSA算法进行加密通讯 .

avascript部分代码(with jQuery)

 代码如下 复制代码

 

    $(document).ready(function(){ 
    //十六进制公钥 
    var rsa_n = "C34E069415AC02FC4EA5F45779B7568506713E9210789D527BB89EE462662A1D0E94285E1A764F111D553ADD7C65673161E69298A8BE2212DF8016787E2F4859CD599516880D79EE5130FC5F8B7F69476938557CD3B8A79A612F1DDACCADAA5B6953ECC4716091E7C5E9F045B28004D33548EC89ED5C6B2C64D6C3697C5B9DD3"; 
         
    $("#submit").click(function(){ 
        setMaxDigits(131); //131 => n的十六进制位数/2+3 
        var key      = new RSAKeyPair("10001", '', rsa_n); //10001 => e的十六进制 
        var password = $("#password").val(); 
        password = encryptedString(key, password); //不支持汉字 
        $("#password").val(password); 
        $("#login").submit(); 
        alert(password); //test 
    }); 
    }); 

 

PHP部分代码

 代码如下 复制代码

 

    /**
     * 公钥加密
     * www.111Cn.net
     * @param string 明文
     * @param string 证书文件(.crt)
     * @return string 密文(base64编码)
     */ 
    function publickey_encodeing($sourcestr, $fileName) 
    { 
        $key_content = file_get_contents($fileName); 
        $pubkeyid    = openssl_get_publickey($key_content); 
         
        if (openssl_public_encrypt($sourcestr, $crypttext, $pubkeyid)) 
        { 
            return base64_encode("".$crypttext); 
        } 
    } 
    /**
     * 私钥解密
     *
     * @param string 密文(二进制格式且base64编码)
     * @param string 密钥文件(.pem / .key)
     * @param string 密文是否来源于JS的RSA加密
     * @return string 明文
     */ 
    function privatekey_decodeing($crypttext, $fileName, $fromjs = FALSE) 
    { 
        $key_content = file_get_contents($fileName); 
        $prikeyid    = openssl_get_privatekey($key_content); 
        $crypttext   = base64_decode($crypttext); 
        $padding = $fromjs ? OPENSSL_NO_PADDING : OPENSSL_PKCS1_PADDING; 
        if (openssl_private_decrypt($crypttext, $sourcestr, $prikeyid, $padding)) 
        { 
            return $fromjs ? rtrim(strrev($sourcestr), "/0") : "".$sourcestr; 
        } 
        return ; 
    } 
    //JS->PHP 测试 
    $txt_en = $_POST['password']; 
    $txt_en = base64_encode(pack("H*", $txt_en)); 
    $file = 'ssl/server.pem'; 
    $txt_de = privatekey_decodeing($txt_en, $file, TRUE); 
    var_dump($txt_de); 
    //PHP->PHP 测试  www.111cn.net
    $data = "汉字:1a2b3c"; 
    $config = Core::getInstance()->config; 
    $file1 = 'ssl/server.crt'; 
    $file2 = 'ssl/server.pem'; 
    $a = publickey_encodeing($data, $file1); 
    $b = privatekey_decodeing($a, $file2); 
    var_dump($b); 

 

其中密钥的获取是关键(其他难点已经被从代码中解决)

时间: 2024-08-01 13:45:20

php 防止恶意注册的程序代码的相关文章

asp.net后台程序-asp.net注册和登录代码怎么写呀。。

问题描述 asp.net注册和登录代码怎么写呀.. asp.net写网站进行注册和登录的实现,连接的是sql server2008数据库. 解决方案 直接用login控件createuserwizard控件和membershiphttp://blog.sina.com.cn/s/blog_561be3720100nxot.htmlhttp://blog.csdn.net/devillyd/article/details/6197294 解决方案二: 用ASP.NET写你自己的代码生成器

解决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

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

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

如何阅读他人的程序代码

 近日,在互联网上游荡,偶然发现一篇曾经的文章,是关于如何阅读他人程序代码的,阅后颇为受益,于是乎重新整理了一下格式,将此文转载如下:   如何阅读他人的程序代码 文/王建兴   作者简介: 王建兴,清华大学资讯工程系的博士研究生,研究兴趣包括计算机网络.点对点网络.分布式网络管理.以及行动式代理人,专长则是Internet应用系统的开发.曾参与过的开发项目性质十分广泛而且不同,从ERP.PC Game到P2P网络电话都在他的涉猎范围之内.      一.读懂程序代码,使心法皆为我所用 程序代码

vs2012-如何编写软件授权注册密钥程序

问题描述 如何编写软件授权注册密钥程序 请教下大家:如果编写软件授权密钥和软件注册,谢谢!visual studio 2012软件 解决方案 密钥,你可以随机产生一个guid就可以了,然后服务器保存,用这个序列号来设置对应有效期等. 客户端提供界面要用户输入序列号,然后验证的时候发送到到服务器校验. 解决方案二: 先随机生成很多密钥(比如guid),存放在服务器上,然后软件注册时把用户输入的密钥发给服务器,服务器发现有这个密钥就返回注册成功,并把这个密钥和用户的机器码相关联 解决方案三: 随机生

检测代码-检测程序代码如何写?

问题描述 检测程序代码如何写? 类似360安全软件的"程序检测代码怎么写?如何再加上程序个数统计功能,并能正常运行"?希望得到各位的帮助!我是大一的,希望大家能指导一下.谢谢! 解决方案 扫描系统注册表 HKEY_LOCAL_MACHINESoftWareMicrosoftWindowsCurrentVersionUninstall 解决方案二: 通过注册表可以获取安装的应用程序信息,也可以统计个数

JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)_java

下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码,一起看看吧. 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JS

Java简易登录注册小程序_java

登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的地方,详见其它博客. 功能介绍:简单的登录注册系统,使用了数据库sqlserver.单例模式.正则表达式以及图形化开发等知识. 1.在登录界面,可以登录或者注册用户. 注册用户界面,按照正则表达式规定的格式要求来输入信息,若有误,则重新输入. 2.点击注册,首先连接SQLserver数据库,连接成功则会判断该用户名是否已经存在,若存在,则给出提示.反之则进行注册. 3.登录界面,点击登录按钮时,首先与数据库

初学java,自己用java写了一个简单的注册登录程序,没报错但有问题,希望能帮忙指点。

问题描述 初学java,自己用java写了一个简单的注册登录程序,没报错但有问题,希望能帮忙指点. import java.util.Scanner; class Yanzheng{ private String n; private String p; public void setNa(String na){ this.n = na; } public void setPa(String pa){ this.p = pa; } public String getNa(){ return n;