WEB开发网      濠电娀娼ч崐濠氬疾椤愶附鍋熸い鏍ㄧ〒闂勫嫰鏌﹀Ο渚Ц闁诲氦顕ч湁婵犲﹤楠告禍鍓х磼鏉堛劌绗氶柟宄版嚇閹晠宕归銈嗘濠电偞鍨堕幐鎾磻閹捐秮褰掓偐閻戞﹩妫勯梺鎼炲妼鐎涒晝绮嬪澶樻晝闁挎繂鏌婇敃鍌涚厵閻庢稒锚閻忥絾绻濇繝鍐ㄧ伌闁诡垰鍟村畷鐔碱敂閸♀晙绱樺┑鐐差嚟婵儳螞閸曨剚鍙忛柍鍝勬噹缁€澶嬬箾閹存繄锛嶆鐐灲閹綊宕惰濡插鏌涢妸銉ヮ劉缂佸倸绉归弫鎾绘晸閿燂拷 ---闂備焦瀵уú鈺呭箯閿燂拷
开发学院软件开发VC 修复缓冲区溢出问题 阅读

修复缓冲区溢出问题

 2009-03-07 20:02:33 来源:WEB开发网 闂備線娼уΛ鎾箯閿燂拷闂備礁鎲¢崹鐢垫崲閹扮増鍎嶆い鎺戝€甸崑鎾斥槈濞嗗秳娌紓鍌氱▌閹凤拷濠电姭鎷冮崨顓濈捕闂侀潧娲ゅú銊╁焵椤掍胶鈯曢柕鍥╁仧缁辩偤鏁撻敓锟�闂備線娼уΛ鎾箯閿燂拷  闂備胶枪缁绘鈻嶉弴銏犳瀬闁绘劕鎼痪褔鏌曟繝蹇曠窗闁煎壊浜滈—鍐偓锝庡墮娴犙勭箾閸喎鐏ユい鏇樺劦椤㈡瑩鎮℃惔銇帮拷
核心提示: 修复缓冲区溢出现在,我们继续讨论一些更实际的内容 - 如何在您的代码中删除和防止缓冲区溢出,修复缓冲区溢出问题(3),迁移到托管代码在 2002 年 2 月和 3 月,我们举办了 Microsoft Windows Security Push 活动,要求代码传递缓冲区的长度如果任何函数调用

修复缓冲区溢出

现在,我们继续讨论一些更实际的内容 - 如何在您的代码中删除和防止缓冲区溢出。 

迁移到托管代码

在 2002 年 2 月和 3 月,我们举办了 Microsoft Windows Security Push 活动。在此期间,我的工作组对 8,500 多位人员在设计、编写、测试和记录安全功能方面进行了培训。我们为所有设计人员提出的一个建议就是,制定计划,将相应的应用程序和工具从本机 Win32 C++ 代码迁移到托管代码。这样做有多种原因,主要是有助于减少缓冲区溢出。在托管代码中,很难创建出包含缓冲区溢出的代码,因为所编写的代码不能直接访问指针、计算机寄存器或内存。您应当考虑,或者至少要计划将某些应用程序和工具迁移到托管代码中。例如,管理工具就是一个很好的迁移对象。当然,我们也要现实一些,因为不可能在一个晚上将所有的应用程序从 C++ 迁移到 C# 或其他托管语言中。

遵循以下重要规则

当编写 C 和 C++ 代码时,应注意如何管理来自用户的数据。如果某个函数具有来自不可靠源的缓冲区,请遵循以下规则:

要求代码传递缓冲区的长度。

探测内存。

采取防范措施。

现在我们来仔细看看以上每种情况。

要求代码传递缓冲区的长度

如果任何函数调用具有类似特征,将出现一个错误:

void Function(char *szName) {
  char szBuff[MAX_NAME];
  // 复制并使用 szName
  strcpy(szBuff,szName);
}

此代码的问题在于函数不能判断 szName 的长度,这意味着将不能安全地复制数据。函数应知道 szName 的大小:

void Function(char *szName, DWORD cbName) {
  char szBuff[MAX_NAME];
  // 复制并使用 szName
  if (cbName < MAX_NAME)
   strncpy(szBuff,szName,MAX_NAME-1);
}

上一页  1 2 3 4 5 6  下一页

Tags:修复 缓冲区 溢出

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接