2010-05-07 23 views
4

我根本不是堆棧痕跡的大師。我甚至不知道如何得到它們。無論如何,我想知道是否輸入在輸入框中輸入的密碼是安全的。不能通過獲取堆棧跟蹤來檢索它嗎?通過堆棧跟蹤輸入框中寫入的密碼是否不安全?

密碼輸入的方​​式在許多地方被發現:在TEDIT它創建的輸入框

  • 可能的功能,存儲結果的變量
  • 結果的

    • Caption屬性該命令的InputBox
    • 等...

    如果答案是「是的,這是一個漏洞」,然後我的世界崩潰了:p。可以做些什麼來避免這個安全漏洞?

    注意:InputBox是一個示例,但它可以帶有「自制」登錄提示符。
    InputBox是一個Delphi命令,但我沒有用Delphi標籤標記問題,因爲我想這個問題涉及任何語言。

  • 回答

    21

    這被稱爲氣密艙口蓋問題,並且源於道格拉斯亞當斯的一本書中的一章(至少一個來源)稱爲「銀河搭車指南」。其中,我們的兩名主角正在被一名大型警衛攜帶,並被傾倒入一個氣閘中,等待被撤到太空。在某個時候,我們的一位主角說他有解決方案,但是「它涉及到密閉艙口的另一側。」

    讓我解釋一下。

    如果你有一個能夠在你自己的機器上執行代碼(或以其他方式「成爲」)的黑客,你已經失去了。在這一點上,餅乾可以做很多事情。

    因此,您的第一道防線應該是防止壞人訪問您的機器,如果您可以處理該問題,則安全性變得更容易。

    所以不,這不是一個漏洞,它是你電腦工作的基本方式。最簡單的形式是,如果某人能夠獲得運行時程序的運行時實時堆棧跟蹤,這可能意味着他們已將某些看起來像調試程序的東西連接到程序,並且能夠「調試「你的程序在運行。斷點可以很容易地從內存中獲取數據,對其進行處理,然後在用戶不知道發生任何事情的情況下恢復程序,但實際上,獲取這些信息的方法要簡單得多前提是您可以在系統上執行代碼

    現在,儘管如此,在.NET和許多其他運行時支持嘗試至少使其更難,而不是存儲整個字符串,他們攔截一個和一個按鍵到您的輸入框,並編碼它與密碼的其餘部分一起,以便每個字符不以純文本格式存儲。

    但是,處理此問題的代碼變得非常繁瑣,因爲任何試圖以明文形式獲取整個密碼的嘗試都會使整個練習變得毫無意義,所以除非您能夠通過此類編碼密碼結束對於你的系統到端,這不會真的有很大的幫助。

    In。NET,有問題的類是System.SecureString

    但是,如果壞人可以在您的平臺上執行代碼,那麼有什麼辦法阻止他攔截擊鍵並將它們組合在一起形成密碼?

    這裏有一個鏈接夫婦用類似的問題的例子:

    你可以告訴我是雷蒙德陳的粉絲。

    +0

    優秀的答案和閱讀的樂趣!感謝你的回答。 – FileVoyager 2010-05-07 11:53:25

    +0

    這位壞人可能是你的大學合法登錄共享機器(共享可能是因爲計算機綁定的許可證)。或者,除了讀取日誌文件外,可能有人無法訪問計算機。 – maaartinus 2014-08-18 07:57:11