es el código php al menos medianamente seguro?
-
09-09-2019 - |
Pregunta
Tengo un montón de $ _POST variables que están siendo enviados a través de una forma larga y dura en lugar de codificar cada uno con un mysql_escape_string()
¿Está bien para mí hacer lo siguiente? No sé si esto es realmente seguro y / o código viable.
foreach ($_POST as &$post_item){
$post_item = mysql_escape_string($post_item);
}
Estoy bastante seguro de que, debido a que estoy usando la Y, que está pasando en modo de referencia, no el valor, así que estoy realmente cambiar el valor en el $ _POST.
Además, debería utilizar mysql_real_escape_string()
lugar?
EDIT: estoy usando PDO y preparo () junto con el método anterior. ¿Esto cuidar de él para mí?
Solución
¿Por qué no usar array_map()
?
array_map(mysql_real_escape_string, $_POST);
Pero, en realidad, usted debe utilizar declaraciones parametrizados / preparado.
mysql_real_escape_string()
toma el carácter de base de datos actual establecido en cuenta, mysql_escape_string()
no lo hace. Así que la primera es la mejor alternativa en comparación.
Edit (seguimiento de edición de la OP a la pregunta):
Desde que ya hace DOP prepara declaraciones, no hay necesidad de modificar sus valores. DOP se encarga de todo, eso es todo el punto de que ( Si usted realmente poner todos los datos de parámetros, es decir - sólo concatenación de cadenas para construir sentencias SQL conduce al desastre con DOP o sin ella). Escapar de los valores de antemano llevaría a valores escapado en la base de datos.
Otros consejos
Sí, usted debe utilizar mysql_real_escape_string()
, si vas a ir por ese camino. Pero la forma correcta para asegurarse de que las variables son seguros para enviar a la base de datos está utilizando consultas parametrizadas que se proporcionan en PHP a través de cualquiera de los href="http://php.net/mysqli" rel="nofollow noreferrer"> mysqli funciones o DOP .
Además de los comentarios anteriores, otro de los beneficios de utilizar consultas parametrizadas es que la base de datos será capaz de hacer mejor las optimizaciones y probablemente usar un plan de consulta almacenado en caché por lo que obtendrá un mejor rendimiento.