`

在Visual Studio11编译器的安全性增强-下一代Visual C++2012的新特性

 
阅读更多

注 - 这个博客帖子描述了一个未发布的产品功能此功能可能会改变最终产品发布之前

微软正在积极开发的Visual Studio11,不断寻找方法提高安全相关的功能作为这项工作的一部分我们正在更新一些增强/ GS编译器开关,这默认,使基层代码生成的安全功能超越了现在熟悉基于cookie的堆栈溢出保护这些以后的文章我们将提供一些细节

安全开发生命周期(SDL/ GS编译器能协助安全软件开发范围之外建议这些具体代码生成功能使用安全相关的编译器警告和更多一般性建议适当初始化或消毒指针strict_gs_check范围。

这是第一次我们希望能提供一个中央机制,使这些额外的安全性支持通过一个新的/ SDL开关 / SDL影响是双重的:

- / SDL SDL强制编译器警告在编译过程中错误处理

- / SDL使额外的代码生成功能,如增加栈缓冲区溢出保护指针初始化或消毒有限的一套明确界定情况范围

这种双管齐下的办法,反映了我们信念安全软件是最好的实现结合检测,并固定在开发过程中代码中的错误安全缓解部署将显着增加难以利用任何剩余错误

/ SDL编译器开关默认是禁用的,并且可以在Visual Studio的用户界面轻松地打开当前项目属性页,并访问配置属性 - > C / C ++ - >常规选项启用

那么是什么/ SDL开关吗?

使一切都包含/ GS/ SDL开关启用的功能是启用/ GS启用/ SDL一个我们将提供更多的背景额外的/ GS/ SDL在未来职位特点,在深入细节现在,我们注意到,它们包括

启用下列SDL强制编译器警告视为错误

Warning

Command line switch

Description

C4146

/we4146

A unary minus operator was applied to an unsigned type, resulting in an unsigned result

C4308

/we4308

A negative integral constant converted to unsigned type, resulting in a possibly meaningless result

C4532

/we4532

Use of “continue”, “break” or “goto” keywords in a __finally/finally block has undefined behavior during abnormal termination

C4533

/we4533

Code initializing a variable will not be executed

C4700

/we4700

Use of an uninitialized local variable

C4789

/we4789

Buffer overrun when specific C run-time (CRT) functions are used

C4995

/we4995

Use of a function marked with pragma deprecated

C4996

/we4996

Use of a function marked as deprecated

一个开发人员选择大部分/ SDL的功能,但排除一个给定的警告编号假设为例C4146然后可以通过/ WD开关禁用彗星/彗星++具体警告实现 - >命令行 - >附加选项Visual Studio的用户界面

strict_gs_check pragma是适用于所有的C/ C + +代码编译/ SDL指示编译器将考虑作为潜在的堆栈缓冲区溢出保护候选人更多的功能 Visual Studio 2010中引入的GS优化得到了提高strict_gs_check一起更好地工作,特别是使许多额外的安全检查strict_gs_check被证明是不必要和删除

附加/ SDL代码生成功能,在以后的职位详细覆盖

Microsoft强烈建议使用/ GS开关因为在以往的Visual Studio版本在Visual Studio11/ SDL开关提供更大保障覆盖面机会期间和之后发展停留特定的安全利益使用/ GS的更多细节调整在Visual Studio11和/ SDL

当然,安全性开发生命周期(SDL是一个完整的过程和开发安全的软件这样方法包括远远高于使用特定的编译器开关 - 阅读更多查找到SDL额外资源

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics