¿Qué es la opción Verificaciones del ciclo de vida del desarrollo de seguridad en Visual Studio?

81

Estoy usando Visual Studio 2013 Preview, aunque estoy seguro de que lo he visto en versiones anteriores. Al crear un nuevo proyecto usando el asistente, selecciono C ++, Aplicación de consola Win32, y hay una opción para habilitar las Verificaciones del ciclo de vida del desarrollo de seguridad en mi proyecto. ¿Alguien podría explicar exactamente qué le hace esta opción a mi código / proyecto?

Neil Kirk
fuente

Respuestas:

71

El /sdlinterruptor se describe aquí . Convierte algunas advertencias en errores, lo que no afecta su código. Además, aplica el /GScontrol de forma más agresiva.

No espere demasiado de él. Microsoft SDL es realmente una solución para la programación en C al estilo de los años 80. Incluso si usa C ++ del siglo XX, no lo necesita. Por ejemplo, operator+(std::string, std::string)es seguro y portátil. Por el contrario, la solución SDL de Microsoft aquí no es portátil ni segura: la idea subyacente /GSes encontrar errores con el manejo de cadenas C en tiempo de ejecución y abortar el programa, lo que limita las consecuencias pero no lo hace seguro.

MSalters
fuente
Las cadenas no son la única causa de errores de memoria. / sdl puede ayudarlo a identificar el uso de variables unitarias, entre otras cosas.
Jørgen Fogh
@ JørgenFogh: Estás describiendo la advertencia C4700, para la cual no necesitas / sdl. Es una advertencia de nivel 1; debe desactivar todas las advertencias antes de que desaparezca C4700. Si sus desarrolladores están haciendo eso, tiene problemas que SDL tampoco resolverá.
MSalters
Recuerdo haber leído en alguna parte que las advertencias se vuelven más detalladas, porque / sdl activa un análisis estático más detallado. Sin embargo, no recuerdo dónde lo leí.
Jørgen Fogh
3
Realiza una desinfección limitada del puntero. En expresiones que no implican desreferencias y en tipos que no tienen un destructor definido por el usuario, las referencias de puntero se establecen en una dirección no válida después de una llamada para eliminar. Esto ayuda a evitar la reutilización de referencias de puntero obsoletas. Realiza la inicialización de miembros de clase. Inicializa automáticamente todos los miembros de la clase a cero en la instanciación de objetos (antes de que se ejecute el constructor). Esto ayuda a prevenir el uso de datos no inicializados asociados con miembros de clase que el constructor no inicializa explícitamente.
Motes
1
@Motes: Deberías haberlo escrito como una respuesta separada. Esto es mucho más útil que una respuesta (burlona) para la que se coloca este comentario. Además, el enlace que se proporciona allí es malo. Se debe estar presente .
ahmd0
2

El ciclo de vida de desarrollo de seguridad de Microsoft es un proceso de desarrollo de software utilizado y propuesto por Microsoft para reducir los costos de mantenimiento del software y aumentar la confiabilidad del software con respecto a los errores relacionados con la seguridad del software.

Estos pueden ser útiles:

http://download.microsoft.com/download/B/5/A/B5A89F4C-D591-4AAB-BF45-D818D80527B6/SDLServices2011.pdf

http://msdn.microsoft.com/en-us/library/windows/desktop/84aed186-1d75-4366-8e61-8d258746bopq.aspx

Mohammad Izady
fuente
10
Eso es mucho material. ¿Qué le hace a mi código marcar la opción?
Neil Kirk