Strsafe.h:更安全的C語言字串處理函數

來源:互聯網
上載者:User

原文出處:Strsafe.h: Safer String Handling in C:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/strsafe.asp

在微軟公司舉行的Microsoft Windows Security Push 活動期間,一批測試者、程式管理經理和普通程式員共同決定要為 C 語言量身定製一套具有較高安全性的字串處理函數,並且希望這些函數能被 Windows 程式員和微軟公司內部的程式員所採用。

簡單說來,現有的 C 語言運行時函數實在難以在當今充斥著惡意攻擊企圖的大環境下立足。這些函數要麼在傳回值和參數上缺乏一致性,要麼隱含著所謂的“截斷誤差”(truncation errors) 錯誤,要麼無法提供足夠強大的功能。坦言之,調用這些函數的代碼太容易產生“記憶體溢出”問題了。

我們發現,面向 C++ 程式員的類足以應付各種安全處理字串的編程需要;他們能夠選擇 MFC 的Cstring 類、ATL 的CComBSTR 類 或者STL 的string 類,等等。然而,經典的 C 語言程式仍然普遍地存在,何況許多人正在把 C++ 當作 “改良的 C 語言” 來用,卻把豐富的 C++ 類束之高閣。

其實只需要添加一行代碼,你就能在 C 語言代碼中調用安全性良好的 strsafe 系列函數了,詳細請參閱:

《Using the Strsafe.h Functions》:http://msdn.microsoft.com/en-us/library/ms647466.aspx

這些新函數包含在一個標頭檔和一個函數庫(可選)中,而後兩者能在新版的 Platform SDK 中找到。對,就這麼簡單:

#include "strsafe.h"

還等什麼呢!

再強調一次,對 strsafe 函數庫的引用是可選的。

為了實現 strsafe 系列函數的目標,你的代碼必須滿足下列條件:

始終以 NULL 字元結束字串。

始終檢測目標緩衝區的長度。

始終用 HRESULT 語句產生統一的傳回值。

兼顧 32 位與 64 位元兩種運行環境。

具有靈活性。

我們覺得,缺乏統一性是導致現有許多 C 語言字串處理函數容易產生安全性漏洞的根本原因,而 strsafe 系列函數所帶來的高度統一性恰恰是解決此問題的一劑良藥。然而,strsafe 也不是萬能藥。單純依靠 strsafe 系列函數並不能保證代碼的安全性和堅固性——你還必須開動你的大腦才行——然而這樣對解決問題還是大有協助的!

下面給出一段採用經典 C 語言已耗用時間函數的代碼:

void UnsafeFunc(LPTSTR szPath,DWORD cchPath) {

TCHAR szCWD[MAX_PATH];


GetCurrentDirectory(ARRAYSIZE(szCWD), szCWD);

strncpy(szPath, szCWD, cchPath);

strncat(szPath, TEXT("\\"), cchPath);

strncat(szPath, TEXT("desktop.ini"),cchPath);
}

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。