SDL检查

Posted Love流浪的猪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDL检查相关的知识,希望对你有一定的参考价值。

在用 Visual Studio 编译比较早的代码时,经常会遇到错误:

错误 C4996 ‘wcscpy‘: This function or variable may be unsafe. Consider using wcscpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. BcpService e:\c800\pc\src\bcpservice\createindex.cpp 22

警告 C4200 使用了非标准扩展: 结构/联合中的零大小数组 BcpService e:\c800\pc\src\bcpservice\libusb.h 738

错误 C4996 ‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. BcpService e:\c800\pc\src\bcpservice\creatbcpfile.cpp 534

等。。。

在项目属性中关闭SDL检查后就可以解决该问题。

 

 

当然,最好是修改代码,使用错误提示中的修改。

但是某些情况下代码不允许修改,就需要关闭SDL检查。

什么是SDL检查

 

微软正在积极开发的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的额外资源。

http://blog.csdn.net/itcastcpp/article/details/7069915























以上是关于SDL检查的主要内容,如果未能解决你的问题,请参考以下文章

powershell 使用SDL Web CMS交叉检查登台网站上的XPM组件元数据。

powershell 使用SDL Web CMS交叉检查登台网站上的XPM组件元数据。

csharp 检查TCM URI是否为ECL项。 (SDL Tridion 2013中的ECL API)

csharp 检查TCM URI是否为ECL项。 (SDL Tridion 2013中的ECL API)

sql 检查SDL Tridion 2013 SP1 MS SQL数据库中的活动预览会话。

sql 检查SDL Tridion 2013 SP1 MS SQL数据库中的活动预览会话。