b'\n_START_ARTICLE_\nProgramaci\xc3\xb3n defensiva\n_START_SECTION_\nProgramaci\xc3\xb3n segura\n_START_PARAGRAPH_\nLa programaci\xc3\xb3n defensiva es algunas veces referida como programaci\xc3\xb3n segura por los cient\xc3\xadficos de computaci\xc3\xb3n los cuales ubican este enfoque minimizando errores de software._NEWLINE_Los errores de software (bugs) pueden ser potencialmente usados por un hacker para una inyecci\xc3\xb3n de c\xc3\xb3digo, ataques de denegaci\xc3\xb3n de servicio u otro ataque._NEWLINE_Una diferencia entre programaci\xc3\xb3n defensiva y pr\xc3\xa1cticas normales es que pocas hip\xc3\xb3tesis son hechas por el programador, el cual intenta manejar todos los posibles estados de error. En resumen, el programador nunca asume que una llamada a una funci\xc3\xb3n particular o biblioteca trabajar\xc3\xa1 bajo las entradas previstas.\n_START_SECTION_\nT\xc3\xa9cnicas de programaci\xc3\xb3n defensiva\n_START_PARAGRAPH_\nAqu\xc3\xad est\xc3\xa1n algunas t\xc3\xa9cnicas de programaci\xc3\xb3n defensiva sugeridas por algunos de los cient\xc3\xadficos l\xc3\xadderes de computaci\xc3\xb3n para evitar crear problemas de seguridad y errores de software. Estos cient\xc3\xadficos afirman que aunque este proceso pueda mejorar la calidad el c\xc3\xb3digo, no es suficiente para asegurar la seguridad.\n_START_SECTION_\nReducir complejidad del c\xc3\xb3digo fuente\n_START_PARAGRAPH_\nNunca hacer el c\xc3\xb3digo m\xc3\xa1s complejo de lo necesario. La complejidad genera bugs, incluyendo problemas de seguridad. Esta meta pude tener conflicto con el objetivo de escribir programas que puedan recuperarse de cualquier error y manejar cualquier entrada de datos. Manejar todas las ocurrencias inesperadas en un programa requiere que el programador a\xc3\xb1ada c\xc3\xb3digo extra, el cual pudiera tambi\xc3\xa9n tener bugs.\n_START_SECTION_\nRevisiones del c\xc3\xb3digo fuente\n_START_PARAGRAPH_\nUna revisi\xc3\xb3n de c\xc3\xb3digo es donde alguien diferente al autor original realiza una auditor\xc3\xada de c\xc3\xb3digo. Una auditor\xc3\xada de c\xc3\xb3digo hecha por el mismo creador es insuficiente. La auditor\xc3\xada la debe hacer alguien que no sea el autor, como cuando se escribe un libro, debe ser revisado por alguien que no sea el autor._NEWLINE_Simplemente haciendo el c\xc3\xb3digo disponible para que otros lo lean (software libre) es insuficiente, pues no hay garant\xc3\xada que el c\xc3\xb3digo sea efectivamente revisado, no dejando que sea rigurosamente revisado.\n_START_SECTION_\nPruebas de software\n_START_PARAGRAPH_\nLas pruebas de software deber\xc3\xa1n ser para tanto que el software trabaje como debe, como cuando se supone que pase si se realice deliberadamente malas entradas._NEWLINE_Las herramientas de prueba pueden capturar entradas de teclado asociadas con operaciones normales. Luego las cadenas de texto de estas entradas capturadas pueden ser copiadas y editadas para ensayar todas las permutaciones y combinaciones, luego ampliarlas para tests posteriores despu\xc3\xa9s de cualquier modificaci\xc3\xb3n-. Los defensores de la clave de registro afirman que los programadores que usan este m\xc3\xa9todo deber\xc3\xa1n asegurar que las personas a las cuales se les est\xc3\xa1n capturando las entradas est\xc3\xa9n al tanto de esto, y con que prop\xc3\xb3sito?, para evitar acusaciones de violaci\xc3\xb3n de privacidad .\n_START_SECTION_\nReutilizaci\xc3\xb3n inteligente del c\xc3\xb3digo fuente\n_START_PARAGRAPH_\nSi es posible, reutilizar c\xc3\xb3digo. La idea es capturar beneficios de un bien escrito y bien probado c\xc3\xb3digo fuente, en vez de crear bugs innecesarios._NEWLINE_Sin embargo, reutilizar c\xc3\xb3digo no siempre es la mejor manera de progresar, particularmente cuando la l\xc3\xb3gica del negocio est\xc3\xa1 involucrada. Reutilizar en este caso puede causar serios bugs en los procesos de negocio.\n_START_SECTION_\nCanonicalizar\n_START_PARAGRAPH_\nLos crackers tienden a buscar representaciones diferentes de los mismos datos._NEWLINE_Por ejemplo, si un programa verifica un nombre de archivo contra /etc/passwd, un cracker puede intentar usar un nombre diferente pero que se refiere al mismo archivo, como /etc/./passwd._NEWLINE_Para evitar bugs debido a entradas no can\xc3\xb3nicas, se deben emplear las API de canonicalizaci\xc3\xb3n.\n_START_SECTION_\nBaja tolerancia contra errores potenciales\n_START_PARAGRAPH_\nAsumir que el c\xc3\xb3digo construido que parece ser propenso a problemas (similares a conocidas vulnerabilidades, etc), son errores (bugs) o potenciales fallos de seguridad. La regla b\xc3\xa1sica es: \xe2\x80\x9cNo estoy al tanto de todos los tipos de explotaciones de seguridad\xe2\x80\x9d Debo proteger en contra de lo que conozco y as\xc3\xad tengo que ser proactivo\xe2\x80\x9d'