簡體   English   中英

使用'魔術數字'保衛課程

[英]Defending classes with 'magic numbers'

幾個月前,我讀了一本關於安全實踐的書,它提出了以下保護我們的類不被覆蓋的方法,例如溢出等:

  • 首先定義一個幻數和一個固定大小的數組(也可以是一個簡單的整數)
  • 使用包含幻數的數組, 並將一個放在頂部,一個放在我們類的底部
  • 函數比較這些數字,如果它們相等 ,並且等於靜態變量, 則該類是正確的,返回true, 否則它是損壞的 ,並返回false。
  • 將此函數放在每個其他類方法的開頭,這樣就會檢查函數調用類的有效性
  • 將此數組放在類的開頭和結尾非常重要

至少這是我記得的。 我正在編寫一個文件encryptor 用於學習目的 ,我正在努力使這個代碼異常安全。

那么,在哪些情況下它是有用的,什么時候我應該使用這種方法,或者這是完全無用的東西值得信賴? 它取決於編譯器還是操作系統?

PS:我忘記了這篇文章中提到的那本書的名字,所以我不能再檢查一下,如果你們中的任何一個人知道它是哪一個請告訴我。

您所描述的內容聽起來像是一個Canary ,但在您的程序中,而不是編譯器。 默認情況下,這通常在使用gcc或g ++時加上(加上一些其他緩沖區溢出對策)。

如果你正在對你的班級進行可變操作並且你想確保你沒有副作用,我不知道是否有一個幻數是非常有用的。 為什么當有一些更有可能成功的方法時,依靠自制的有效性檢查?

校驗和:我認為散列未加密的文本並將其添加到加密文件的末尾更有用。 解密時,刪除哈希值並將哈希值(解密文本)與應該的哈希值進行比較。

我認為大多數(如果不是全部)廣泛使用的加密器/解密器存儲某種校驗和以驗證數據沒有改變。

這種類型的金絲雀將部分保護您免受特定類型的溢出攻擊。 每次運行程序時,都可以通過隨機化canary值來使其更加健壯。

如果你擔心緩沖區溢出攻擊(和你應該是,如果你曾經解析用戶輸入),然后繼續前進,做到這一點。 每次檢查你的金絲雀的速度可能不會太高 總會有其他方法來攻擊您的程序,甚至可能會有小心的緩沖區溢出攻擊,但這是一個便宜的措施,因此可能值得添加到您的課程中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM