• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    如何防止Edit框中的Password不被非法獲取

    發布: 2007-7-14 21:11 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 30次 | 進入軟件測試論壇討論

    領測軟件測試網 文/郝峰

        Windows雖然是一個功能強大的操作系統,但其存在的一些先天性不足,給黑客留下了許多可乘之機,著名的BO程序就是利用Windows的這些漏洞來危害計算機的安全。筆者最近發現了一個很流行的專門獲取Edit框Password的工具,甚至其源代碼已在某報紙發表,這無疑是對Edit的Password功能的完全否定。本文將首先分析非法獲取Password的原理,然后給出用Visual C++來實現保護Edit框中的Password不被非法獲取的對策。

      (一) 非法獲取Password的原理

      Edit是Windows的一個標準控件,當把其Password屬性設為True時,就會將輸入的內容屏蔽為星號(*),從而達到保護的目的。而Edit框中的內容可通過發WM_GETTEXT,EM_GETLINE消息來獲取。黑客程序就是利用Edit的這個特性,首先枚舉當前程序的所有子窗口,當發現枚舉的窗口是EDIT并且具有ES_PASSWORD屬性時,則通過SendMessage向此窗口發送WM_GETTEXT或EM_GETLINE消息,這樣Edit框中的內容就一目了然了。

      (二) 對Password進行保護

      由上述分析可看出,Edit的漏洞在于沒有檢查發送WM_GETTEXT或EM_GETLINE消息者的身份,只要找到Edit窗口句柄,任何進程都可獲取其內容。這里給出一種簡單的方法來驗證發送消息者的身份是否合法。

      1) 創建新CEdit類

      從CEdit繼承一個子類CPasswordEdit, 申明全局變量g_bAuthorIdentity表明消息發送者的身份:

        BOOL g_bAuthorIdentity;
        
      然后響應CWnd的虛函數DefWindowProc,在這個回調函數中進行身份驗證:

    LRESULT CPasswordEdit::DefWindowProc(UINT message,
    WPARAM wParam, LPARAM lParam)
        {
            // 對Edit的內容獲取必須通過以下兩個消息之一
            if(( message == WM_GETTEXT) ||
            ( message == EM_GETLINE))
            {
                // 檢查是否為合法
                if( !g_bAuthorIdentity)
                {
                    // 非法獲取,顯示信息
                    AfxMessageBox(_T("我的密碼,可不能讓你看哦!"));
                    //
                    return 0;
                }
                // 合法獲取
                g_bAuthorIdentity = FALSE;
            }
            return CEdit::DefWindowProc(message, wParam, lParam);
        }
      2) 在數據輸入對話框中做處理

      在對話框中申明一個類成員m_edtPassword:

        CPasswordEdit m_edtPassword;
      然后在對話框的OnInitDialog()中加入下列代碼:

        m_edtPassword.SubclassDlgItem(IDC_EDIT_PASSWORD, this);
      其目的是將控制與新類做關聯。

      之后在對話框的數據交換中將身份設為合法:

        void CDlgInput::DoDataExchange(CDataExchange* pDX)
        {
            // 如果獲取數據
    // 注意:對于CPropertyPage類這里不需要
            if( pDX- >m_bSaveAndValidate) 條件
            if( pDX- >m_bSaveAndValidate)
            {
                g_bAuthorIdentity = TRUE;
            }
            CDialog::DoDataExchange(pDX);
            //{{AFX_DATA_MAP(CDlgInput)
            DDX_Text(pDX, IDC_EDIT_PASSWORD, m_sPassword);
            //}}AFX_DATA_MAP
    }
      這樣,Password輸入框就會受到保護。

      (三) 需要注意的問題

      以上的方法僅針對VC程序,對于VB程序,需要借助VC做一個Password的ActiveX 控件,實現方法與上類似。同時以上程序在Visual C++6.0上通過,并且用黑客程序 PWBTool測試通過。

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>