Inyección SQL!Definición https://www.owasp.org/index.php/SQL_Injection !Como prevenirlo Para prevenirlo es necesario escapar las cadenas antes de insertarlas en la base de datos. Normalmente esto lo hacen automáticamente las funciones de preparar y ejecutar consultas (como pg_prepare y pg_exec). Si prefiere construir por si mismo consultas tenga en cuenta que la forma de escapar una cadena depende del motor de bases de datos que use. Con PostgreSQL use la función pg_escape_string, o la siguiente porción para escapar la cadena $entrada y dejarla en $salida: $salida = (!get_magic_quotes_gpc()) ? str_replace("'", "''", str_replace('\\', '\\\\', $entrada)) : $entrada; Insistimos que la forma de escapar una cadena depende del motor de base de datos, el ejemplo anterior introduciría caracteres incorrectos en bases de datos con SQLite, pues en ese motor \ no es un secuencia de escape para . Si prefiere un método más general, el paquete MDB2 de PEAR ofrece la función $salida = $bd->escape($entrada); !Buscarlo en código fuente En las fuentes de una aplicación PHP debe revisar inserciones, actualizaciones y consultas a la base de datos. Si inserta datos que vienen de un formulario debe verificar que escapa los valores de los arreglos _GET, _REQUEST y _POST, por ejemplo busque con: find . -name "*php" -exec grep "\$_REQUEST\[" {} ';' find . -name "*php" -exec grep "\$_GET\[" {} ';' find . -name "*php" -exec grep "\$_POST\[" {} ';' XSS - Cross Site Scripting!Definición https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) !Como prevenirlo
!Buscarlo en código fuente Revise sitios donde se emita información en HTML, especialmente datos que provengan del usuario, no sólo en las variables _POST, _GET, _REQUEST sin también en variables que incluyan el URL por ejemplo $_SERVER!['PHP_SELF']. CRSF!Definición https://www.owasp.org/index.php/CSRF !Como prevenirlo Cuando esté emitiendo un formulario incluya un campo escondido con un número aleatorio con un número aleatorio suficientemente grande y aleatorio, almacen el número también en la sesión: if (!isset($_POST!['evita_csrf'])) { $_SESSION!['sin_csrf'] = mt_rand(0, 100000000000); } $this->addElement('hidden', 'evita_csrf', $_SESSION!['sin_csrf']); Cuando usted reciba datos de un formulario compare el valor de la sesión con el valor del campo escondido del formulario: if (!isset($_POST!['evita_csrf']) || $_POST!['evita_csrf'] != $_SESSION!['sin_csrf']) { die("Datos enviados no pasaron verificación CSRF (" . $_SESSION!['sin_csrf'] . ", " . $_POST!['evita_csrf'] . ")" ); } !Buscarlo en código fuente Búsque en formularios generados por la aplicación si se insertó un valor aleatorio. Buffer overflow!Definición https://www.owasp.org/index.php/Buffer_overflow_attack !Como prevenirlo Si la longitud máxima de $out es $maxlong: $out = substr($in, 0, $maxlong); !Buscarlo en código fuente Dominio Público. 2011. https://www.pasosdejesus.org/dominio_publico_colombia.html |