php 防止惡意註冊的程式碼

來源:互聯網
上載者:User

網站開放註冊的時候有一些渣渣就喜歡亂搞我們的網站。使我們站長們 都是蛋疼無比。所以就去百度找了找防止惡意註冊。一般都是加驗證碼。但是會網頁的人一般都是在你的要提交的那個頁面利用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); 

 

其中密鑰的擷取是關鍵(其他痛點已經被從代碼中解決)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.