安全与用户输入
用戶數據,就是任何種類的輸入(來自于 Web 請求或者 URL 中的數據,輸入在 Microsoft Windows 窗體應用程序的控件中的數據,等等),它能夠對代碼產生影響,因為這些數據經常被直接當成參數來使用并且用來調用其他的代碼。這種情況類似于惡意代碼以奇特的參數來調用你的代碼,并且應該采取相應的措施來進行防范。然而,用戶輸入實際上更加難以安全化,因為并沒有堆棧框架來追蹤所出現的潛在的不被信任的數據。
這是最敏感與難度最高的安全漏洞之一,因為盡管它們能夠存在于表面上看起來與安全無關的代碼中,但是它們卻是把壞數據傳遞給其他代碼的主要通道。如果要查看這些漏洞,就需要按照任何種類的輸入數據來想象可能的值范圍,并且考慮是否代碼已經看見了這些數據并且能夠對所有情況作出處理。你可以通過范圍檢查與注入任何不能夠被代碼所處理的輸入來修復這些漏洞。
包括用戶數據的一些重要考慮如下:
- 服務器回應中的任何用戶數據都運行在位于客戶端的服務器網站環境中。如果你的 Web 服務器獲取了用戶數據,那么就會把它插入到被返回的 Web 頁面中,例如,包括并且運行一個 <script> 標記。
- 記住客戶端能夠請求任何 URL。
- 考慮狡猾的路徑或者無效的路徑:
- ..\,過長的路徑。
- 使用通配符(*)。
- 符號擴展(%符號%)。
- 有特殊意義的奇特路徑。
- 預定義的文件系統流名稱(比如 "文件名稱::$DATA")。
- 文件名稱的簡短版本(比如代表 longfilename 的 longfi-1)。
- 記住 Eval(userdata) 能夠做任何事。
- 留意包括了一些用戶數據的名稱延遲綁定。
- 如果你需要分配 Web 數據,那么就需要考慮被允許的不同形式的編碼,其中包括:
- 十六進制編碼(%nn)。
- Unicode 編碼(%nnn)。
- 超長的 UTF-8 編碼(%nn%nn)。
- 雙重編碼(%nn 變成 %mmnn,如果 %mm 是 '%' 的編碼)。
- 留意可能擁有多種規范格式的用戶名稱。例如,在 Microsoft Windows 2000 中,你經常可以使用 MYDOMAIN\username 或者 username@mydomain.example.com 中的任何一種來表示同一用戶。
轉載于:https://www.cnblogs.com/Laeb/archive/2007/02/12/648553.html
總結
- 上一篇: 个性签名想念一个人
- 下一篇: Refactor!™ for ASP.N