Prevención de seguridad de la inyección de PHP A través del proceso anterior, podemos comprender los principios y métodos de la inyección de PHP. Por supuesto, también podemos desarrollar los métodos de prevención correspondientes:
La primera es la configuración de seguridad del servidor. Ya hemos hablado antes de la configuración de seguridad del servidor de Windows y no las repetiremos nuevamente. Las principales aquí son la configuración de seguridad de php+mysql y la configuración de seguridad del host Linux. . Para evitar la inyección de php+mysql, primero configure magic_quotes_gpc en Activado y display_errors en Desactivado. Si es un tipo de identificación, usamos la función intval() para convertirlo en un tipo de entero, como se muestra en el código:
$id=intval($id);
mysql_query="select *from ejemplo donde articieid='$id'"; O escriba así: mysql_query("SELECT * FROM Article WHERE Articleid=".intval($id)."")
Si es un tipo de carácter, use addlashes() Filtrarlo y luego filtrar "%" y "_" como:
$búsqueda=addslashes($búsqueda);
$búsqueda=str_replace(“_”,”_”,$búsqueda);
$búsqueda=str_replace(“%”,”%”,$búsqueda);
Por supuesto, también puede agregar código PHP anti-inyección general:
/******************************
Descripción general del código de seguridad antiinyección de PHP:
Determine si la variable pasada contiene caracteres ilegales como $_POST, $_GET
Función:
Antiinyección
*******************************/
//Caracteres ilegales a filtrar
$ArrFiltrate=array("'",";","unión");
//La URL a la que saltar después de que se produzca un error. Si no se completa, la página anterior será la predeterminada.
$StrGoUrl="";
//Si hay un valor en la matriz
función FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate como $clave=>$valor){
si (eregi($valor,$StrFiltrate)){
devolver verdadero;
}
}
devolver falso;
}
//Fusionar $_POST y $_GET
si(function_exists(array_merge)){
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}demás{
foreach($HTTP_POST_VARS como $clave=>$valor){
$ArrPostAndGet[]=$valor;
}
foreach($HTTP_GET_VARS como $clave=>$valor){
$ArrPostAndGet[]=$valor;
}
}
//Comienza la verificación
foreach($ArrPostAndGet como $clave=>$valor){
si (FunStringExist($valor,$ArrFiltrate)){
echo "alerta(/"indicador Neeao, carácter ilegal/");";
si (vacío($StrGoUrl)){
echo "historia.go(-1);";
}demás{
echo "window.location=/"".$StrGoUrl."/";";
}
salida;
}
}
?>
/******************************
Guardar como checkpostandget.php www.devdao.com
Luego agregue include("checkpostandget.php"); delante de cada archivo php.
*****************************/
Además, el nombre de usuario y la contraseña del administrador están cifrados con md5, lo que puede prevenir eficazmente la inyección de PHP.
También hay algunas precauciones de seguridad que deben reforzarse en el servidor y mysql.
Para la configuración de seguridad del servidor Linux:
Para cifrar la contraseña, utilice la herramienta "/usr/sbin/authconfig" para activar la función de ocultación de contraseña y cifrar la contraseña.
Para prohibir el acceso a archivos importantes, ingrese a la interfaz de comando de Linux e ingrese cuando se le solicite:
#chmod 600 /etc/inetd.conf //Cambiar atributos de archivo a 600
#chattr +I /etc/inetd.conf // Asegúrese de que el propietario del archivo sea root
#chattr –I /etc/inetd.conf // Limitar cambios a este archivo
Para prohibir que cualquier usuario cambie al usuario root mediante el comando su, agregue las dos líneas siguientes al principio del archivo de configuración de su, es decir, el directorio /etc/pam.d/:
Autenticación suficiente /lib/security/pam_rootok.so depuración
Se requiere autenticación /lib/security/pam_whell.so group=wheel
Eliminar todas las cuentas especiales
#userdel lp etc. eliminar usuario
#groupdel lp, etc. Elimine el grupo para prohibir los programas suid/sgid no utilizados
#find / -type f (-perm -04000 - o –perm -02000 ) -execls –lg {} ;