Cómo evitar la inyección de código en c ++

La primera regla de evitar inyectar en código C ++ programas nunca es, nunca, permitir la entrada del usuario para ser procesado por un intérprete de lenguaje de propósito general. Un error común con SQL-inyección es que el programa acepta la entrada del usuario como si fuera siempre es aceptable y lo inserta en una consulta SQL que entonces los barcos fuera al motor de base de datos para su procesamiento.

A modo de ejemplo, un programa que pide la entrada del usuario en una fecha podría ser hackeado. El enfoque de fácil uso más seguro y sería proporcionar al usuario una gráfica del calendario de la que podría seleccionar las fechas de inicio y fin. El programa a continuación, crear una fecha sobre la base de lo que hizo clic el usuario.

Si esto no es posible, entonces el programa debe comprobar cuidadosamente la entrada para asegurarse de que la entrada estaba en el formato adecuado para una fecha, en este caso, aaaa / mm / dd - en otras palabras, cuatro dígitos seguidos de una barra seguida de dos dígitos y una barra inclinada y por último dos dígitos más. Nada más se debe considerar de entrada aceptable.

A veces se puede # 8242-t ser tan específico sobre el formato. Si debe permitir al usuario introducir texto flexibles, entonces al menos puede evitar caracteres especiales. Por ejemplo, # 8242-s casi imposible de hacer la inyección de código SQL sin utilizar, ya sea simple o doble cotización.

Usted puede # 8242-t etiquetas inserto HTML sin necesidad de utilizar un menor que (lt;) y mayor que (>) signo. O usted podría tomar el enfoque que no sea de texto ASCII nada no será tolerado:

// Comprobar alguna cadena # 8242-s # 8242- para asegurarse de que # 8242-s ASCIIsize_type directamente fuera = s.find_first_not_of ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890 _") - if (! Apagado = string :: npos) {cerr lt; lt; "Error n" -}

Este código busca la cadena s para un personaje que no # 8242-S uno de los caracteres de la A a la Z, la aa la z, 0 a 9, o un guión. Si encuentra un carácter tal, entonces el programa rechaza la entrada.

Si usted permite que sólo los caracteres latinos muestran aquí, su aplicación no será utilizable en muchos mercados extranjeros, tales como los que don # 8242-t uso conjuntos de caracteres en inglés (como el árabe, el chino, el hebreo, o el ruso, por nombrar sólo algunos ). Puede que tenga que tomar el camino contrario y sólo tiene que buscar los malos caracteres.




» » » » Cómo evitar la inyección de código en c ++