ホームページ > php教程 > php手册 > php 確認コード セキュリティコード?

php 確認コード セキュリティコード?

WBOY
リリース: 2016-06-13 12:34:14
オリジナル
1208 人が閲覧しました

验证码的作用主要有防止暴力破解,防止恶意灌水,防止自动提交等,在这里我就不多说了。验证码的类型也有数字、字母等,甚至厉害点的还有中文的。但是不管你的验证码多么厉害,只要你在表单验证中存在如下的失误,你的验证码就形同虚设!

验证码的一般思路,就是每次登陆的地方访问一个脚本文件,该文件生成含验证码的图片并将值写入到Session里,提交的时候验证登陆的脚本就会判断提交的验证码是否与Session里的一致。

问题出现了,在登陆密码错误之后,我们不去访问生成验证图片的文件,那么如果Session中的验证码没有被清空,此时验证码就是跟上次的一样,辛辛苦苦构建的验证码机制就形同虚设了。

下面我们先来看一段有问题的代码:
登陆部分:

CODE:
<tr>
>
管理者名: td> >>入力タイプ
=
"テキスト" 名前=" ユーザー名" />td> 🎜 >tr> td
> >="パスワード"
名前
="パスワード"
/>td > td><入力タイプ
="テキスト" 名前 ="キャプチャ" onkeyup="pressCaptcha(this)" /> <🎜; >td>
tr> < 🎜>「正しい」
> <img src
="index.php?act=captcha&1628020115" >width="145" 身長=
"20" alt="CAPTCHA" ボーダー="1" onclick = this.src="index.php?act=captcha&"
Math .
ランダム()
スタイル
="カーソル: ポインタ <🎜" >title=「はっきり見えませんか?クリックして別の確認コードを変更します。"
/>
      td>
      tr>
?>
这里没什么问题,来看登陆验证的代码(我想这样的验证思路,也是大多数人都在用的吧):

CODE:
/*-------------------------------- ---------- */
//-- ログイン情報を確認します
/*------------ ---------------------------------------------------- - */
if ($_REQUEST['act'] == 'signin' )
{
include(
'../includes/cls_captcha.php');

/ * 確認コードが正しいかどうかを確認します */
$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']);

        
// 更新最后登录时间和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['パスワード'] . $_CFG[ 'ハッシュコード']), 時間() 3600 * 24 * 360);
}

'location:./'
); } else { _LANG[

'login_faild'

],
1); }}?>問題は上記のコードにあり、パスワードエラーを確認した後、認証コードが更新されないため、ログイン ページを検証できること コードの画像部分を削除し、URL を使用して検証コード ページにアクセスする限り、ユーザー名、パスワード、取得したばかりの検証コードのみを送信してブルートを実現しますこの方法を使用すると、水注入やチケット詐欺なども実行できます。 以下の写真を見て、直観的な理解を深めてください。 =700) window.open('http://www.bkjia.com/uploads/allimg/131016/05251961K-0.gif');" src="http://www .bkjia.com/uploads/allimg/131016/05251961K-0.gif" onload="if(this.width>'700')this.width='700';if(this.height>'700')this。 height='700';" border=0>

解決策: パスワードが間違っていることを確認した後、確認コードを更新する必要があります。メッセージやその他の種類の場合は、パスワードが間違っていることを確認した後で確認コードを更新する必要もあります。
セキュリティとは次のようなものです。私たちは常にプログラムをより安全にしたいと考えていますが、通常の状況では常に従来の考え方に固執しており、そこから抜け出すことができないため、多くの「型破りな脆弱性」が発生します。私たちのプログラムは完璧ではありません。上記の問題点を指摘するだけでなく、皆さんも「従来とは違う」視点で自分の手順を見直し、行動してほしいと思います。過去をもっと改善してください。気づいていない小さな問題を投稿して、みんなで改善してください

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート