Prévention de la sécurité de l'injection Php Grâce au processus ci-dessus, nous pouvons comprendre les principes et les méthodes de l'injection Php. Bien sûr, nous pouvons également développer des méthodes de prévention correspondantes :
Le premier concerne les paramètres de sécurité du serveur. Nous avons déjà parlé des paramètres de sécurité du serveur Windows et nous ne les répéterons pas ici. Les principaux ici sont les paramètres de sécurité de php+mysql et les paramètres de sécurité de l'hôte Linux. . Pour empêcher l'injection de php+mysql, définissez d'abord magic_quotes_gpc sur On et display_errors sur Off. S'il s'agit d'un type id, nous utilisons la fonction intval() pour le convertir en un type entier, comme indiqué dans le code :
$id=intval($id);
mysql_query="select *from example which articieid='$id'"; Ou écrivez comme ceci : mysql_query("SELECT * FROM article WHERE articleid=".intval($id)."")
S'il s'agit d'un type de caractère, utilisez addlashes() Filtrez-le, puis filtrez "%" et "_" tels que :
$search=addslashes($search);
$search=str_replace(“_”,”_”,$search);
$search=str_replace("%","%",$search);
Bien entendu, vous pouvez également ajouter du code PHP général anti-injection :
/******************************
Description générale du code de sécurité anti-injection PHP :
Déterminez si la variable transmise contient des caractères illégaux tels que $_POST, $_GET
Fonction:
Anti-injection
*****************************/
//Caractères illégaux à filtrer
$ArrFiltrate=array("'",";","union");
//L'URL vers laquelle accéder après qu'une erreur se produit. Si elle n'est pas renseignée, la page précédente sera par défaut.
$StrGoUrl="";
// S'il y a une valeur dans le tableau
fonction FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate as $key=>$value){
if (eregi($value,$StrFiltrate)){
renvoie vrai ;
}
}
renvoie faux ;
}
//Fusionner $_POST et $_GET
si (function_exists (array_merge)) {
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}autre{
foreach($HTTP_POST_VARS comme $key=>$value){
$ArrPostAndGet[]=$valeur ;
}
foreach($HTTP_GET_VARS comme $key=>$value){
$ArrPostAndGet[]=$valeur ;
}
}
//La vérification commence
foreach($ArrPostAndGet comme $key=>$value){
if (FunStringExist($value,$ArrFiltrate)){
echo "alert(/"Invite Neeao, caractère illégal/");";
si (vide ($StrGoUrl)){
echo "histoire.go(-1);";
}autre{
echo "window.location=/"".$StrGoUrl."/";";
}
sortie;
}
}
?>
/******************************
Enregistrer sous checkpostandget.php www.devdao.com
Ajoutez ensuite include("checkpostandget.php"); devant chaque fichier php.
******************************/
De plus, le nom d'utilisateur et le mot de passe de l'administrateur sont cryptés md5, ce qui peut empêcher efficacement l'injection PHP.
Certaines précautions de sécurité doivent également être renforcées sur le serveur et MySQL.
Pour les paramètres de sécurité du serveur Linux :
Pour crypter le mot de passe, utilisez l'outil "/usr/sbin/authconfig" pour activer la fonction d'ombre de mot de passe et crypter le mot de passe.
Pour interdire l'accès aux fichiers importants, entrez dans l'interface de commande Linux et entrez à l'invite :
#chmod 600 /etc/inetd.conf //Changer les attributs du fichier en 600
#chattr +I /etc/inetd.conf // Assurez-vous que le propriétaire du fichier est root
#chattr –I /etc/inetd.conf // Limiter les modifications à ce fichier
Pour interdire à tout utilisateur de passer à l'utilisateur root via la commande su, ajoutez les deux lignes suivantes au début du fichier de configuration su, c'est-à-dire le répertoire /etc/pam.d/ :
Authentification suffisante /lib/security/pam_rootok.so débogage
Authentification requise /lib/security/pam_whell.so group=wheel
Supprimer tous les comptes spéciaux
#userdel lp etc. supprimer l'utilisateur
#groupdel lp, etc. Supprimez le groupe pour interdire les programmes suid/sgid inutilisés
#find / -type f (-perm -04000 - o –perm -02000 ) -execls –lg {} ;