最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php你的驗(yàn)證碼安全碼?

 更新時(shí)間:2007年01月02日 00:00:00   作者:  
驗(yàn)證碼的作用主要有防止暴力破解,防止惡意灌水,防止自動(dòng)提交等,在這里我就不多說(shuō)了。驗(yàn)證碼的類(lèi)型也有數(shù)字、字母等,甚至厲害點(diǎn)的還有中文的。但是不管你的驗(yàn)證碼多么厲害,只要你在表單驗(yàn)證中存在如下的失誤,你的驗(yàn)證碼就形同虛設(shè)!

驗(yàn)證碼的一般思路,就是每次登陸的地方訪問(wèn)一個(gè)腳本文件,該文件生成含驗(yàn)證碼的圖片并將值寫(xiě)入到Session里,提交的時(shí)候驗(yàn)證登陸的腳本就會(huì)判斷提交的驗(yàn)證碼是否與Session里的一致。

問(wèn)題出現(xiàn)了,在登陸密碼錯(cuò)誤之后,我們不去訪問(wèn)生成驗(yàn)證圖片的文件,那么如果Session中的驗(yàn)證碼沒(méi)有被清空,此時(shí)驗(yàn)證碼就是跟上次的一樣,辛辛苦苦構(gòu)建的驗(yàn)證碼機(jī)制就形同虛設(shè)了。

下面我們先來(lái)看一段有問(wèn)題的代碼:
登陸部分:

CODE:
<tr>
          <
td>管理員姓名:td>
          <
td><input type="text" name="username" />td>
      tr>
      <
tr>
          <
td>管理員密碼:td>
          <
td><input type="password" name="password" />td>
      tr>
            <
tr>
          <
td>驗(yàn)證碼:td>
          <
td><input type="text" name="captcha" onkeyup="pressCaptcha(this)" />td>
      tr>
      <
tr>
      <
td colspan="2" align="right">
      <
img src="index.php?act=captcha&1628020115" width="145" height="20" alt="CAPTCHA" border="1" onclickthis.src="index.php?act=captcha&"+Math.random() style="cursor: pointer;" title="看不清?點(diǎn)擊更換另一個(gè)驗(yàn)證碼。" />
      td>
      tr>
?>
這里沒(méi)什么問(wèn)題,來(lái)看登陸驗(yàn)證的代碼(我想這樣的驗(yàn)證思路,也是大多數(shù)人都在用的吧):

CODE:
/*------------------------------------------------------ */
//-- 驗(yàn)證登陸信息
/*------------------------------------------------------ */
if ($_REQUEST['act'] == 'signin')
{
    include(
'../includes/cls_captcha.php');

   
/* 檢查驗(yàn)證碼是否正確 */
   
$validator = new captcha();
   if (!
$validator->check_word($_POST['captcha']))
   {
       
sys_msg($_LANG['captcha_error'], 1);
    }

    
/* 檢查密碼是否正確 */
    
$sql "SELECT user_id, user_name, password, action_list FROM " .$ecs->table('admin_user'). 
            
" WHERE user_name='$_POST[username]' AND password='" .md5($_POST['password']). "'";
    
$row $db->GetRow($sql);

    if (
$row)
    {
        
// 登錄成功
        
set_admin_session($row['user_id'], $row['user_name'], $row['action_list']);

        
// 更新最后登錄時(shí)間和IP
        
$db->Execute("UPDATE " .$ecs->table('admin_user'). 
                    
" SET last_time='" .date('Y-m-d H:i:s'time()). "', last_ip='" .real_ip(). "'".
                    
" WHERE user_id=$_SESSION[admin_id]") OR die($db->ErrorMsg());

        if (isset(
$_POST['remember']))
        {
            
setcookie('ECSCP[admin_id]',    $row[0], time() + 3600 24 360);
            
setcookie('ECSCP[admin_pass]',  md5($row['password'] . $_CFG['hash_code']), time() + 3600 24 360);
        }

        
header('location:./');
    }
    else
    {
        
sys_msg($_LANG['login_faild'], 1);
    }
}
?>
問(wèn)題就出在上面這段代碼里,在檢查密碼錯(cuò)誤之后,并沒(méi)有更新驗(yàn)證碼,這樣我們就可以把登陸頁(yè)面的驗(yàn)證碼圖片部分去掉,而只要用URL訪問(wèn)一下驗(yàn)證碼的頁(yè)面,就可以只提交用戶(hù)名、密碼、剛才得到的驗(yàn)證碼實(shí)現(xiàn)暴力破解了,利用此方法,同樣可以實(shí)現(xiàn)灌水,刷票等。
大家可以看下面的圖片,增強(qiáng)點(diǎn)直觀的認(rèn)識(shí)。


解決方法:我們需要在檢查密碼錯(cuò)誤后更新驗(yàn)證碼,對(duì)于留言等類(lèi)型的,還要在提交成功后更新驗(yàn)證碼。

安全就是這樣,我們總是想讓自己的程序更安全,但是一般情況下,我們又總是走在常規(guī)思維里跳不出來(lái),于是導(dǎo)致我們的程序出現(xiàn)了很多"非常規(guī)漏洞",或者叫做"缺陷",總之就是不完美。我寫(xiě)這篇文章除了指出上面這個(gè)問(wèn)題之外,還希望大家都能行動(dòng)起來(lái),用"非常規(guī)"眼光,重新檢查下自己的程序,把更多以前自己沒(méi)有發(fā)現(xiàn)的小問(wèn)題帖出來(lái),讓大家共同提高!

相關(guān)文章

最新評(píng)論

施秉县| 高要市| 介休市| 洛川县| 方山县| 洛川县| 加查县| 昭平县| 南岸区| 闽侯县| 锡林郭勒盟| 思茅市| 吉林省| 深州市| 廉江市| 措美县| 遂宁市| 张家口市| 福贡县| 会泽县| 乌海市| 梅州市| 富宁县| 余姚市| 恩平市| 西贡区| 平罗县| 鄂伦春自治旗| 西乌珠穆沁旗| 荥经县| 塔城市| 朝阳市| 彰武县| 台山市| 香港| 武夷山市| 武穴市| 大渡口区| 乌拉特中旗| 蛟河市| 通海县|