Sicherheitsprävention der PHP-Injektion Durch den oben genannten Prozess können wir die Prinzipien und Methoden der PHP-Injektion verstehen. Natürlich können wir auch entsprechende Präventionsmethoden entwickeln:
Das erste sind die Sicherheitseinstellungen des Servers. Wir haben bereits zuvor über die Sicherheitseinstellungen des Windows-Servers gesprochen und werden sie nicht noch einmal wiederholen. Die wichtigsten sind hier die Sicherheitseinstellungen von PHP+MySQL und die Sicherheitseinstellungen des Linux-Hosts . Um die PHP+MySQL-Injection zu verhindern, setzen Sie zunächst magic_quotes_gpc auf On und display_errors auf Off. Wenn es sich um einen ID-Typ handelt, verwenden wir die Funktion intval(), um ihn in einen Integer-Typ umzuwandeln, wie im Code gezeigt:
$id=intval($id);
mysql_query="select *from example where articieid='$id'"; Oder schreiben Sie so: mysql_query("SELECT * FROM Article WHERE Articleid=".intval($id)."")
Wenn es sich um einen Zeichentyp handelt, verwenden Sie addslashes() Filtern Sie es und filtern Sie dann „%“ und „_“, wie zum Beispiel:
$search=addslashes($search);
$search=str_replace(“_”,_”,$search);
$search=str_replace(“%”,%,$search);
Natürlich können Sie auch allgemeinen PHP-Anti-Injection-Code hinzufügen:
/******************************
Beschreibung des allgemeinen PHP-Anti-Injection-Sicherheitscodes:
Stellen Sie fest, ob die übergebene Variable unzulässige Zeichen wie $_POST, $_GET enthält
Funktion:
Anti-Injektion
******************************/
//Unzulässige Zeichen, die gefiltert werden sollen
$ArrFiltrate=array("'",";","union");
//Die URL, zu der nach Auftreten eines Fehlers gesprungen werden soll. Wenn sie nicht ausgefüllt wird, wird standardmäßig die vorherige Seite verwendet.
$StrGoUrl="";
//Ob es einen Wert im Array gibt
Funktion FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate as $key=>$value){
if (eregi($value,$StrFiltrate)){
return true;
}
}
return false;
}
//$_POST und $_GET zusammenführen
if(function_exists(array_merge)){
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}anders{
foreach($HTTP_POST_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
foreach($HTTP_GET_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
}
//Die Überprüfung beginnt
foreach($ArrPostAndGet as $key=>$value){
if (FunStringExist($value,$ArrFiltrate)){
echo "alert(/"Neeao prompt, unzulässiges Zeichen/");";
if (empty($StrGoUrl)){
echo "history.go(-1);";
}anders{
echo "window.location=/"".$StrGoUrl."/";";
}
Ausfahrt;
}
}
?>
/******************************
Speichern unter checkpostandget.php www.devdao.com
Fügen Sie dann include("checkpostandget.php"); vor jeder PHP-Datei hinzu.
******************************/
Darüber hinaus sind der Administrator-Benutzername und das Passwort MD5-verschlüsselt, wodurch PHP-Injection wirksam verhindert werden kann.
Es gibt auch einige Sicherheitsvorkehrungen, die auf dem Server und MySQL verstärkt werden müssen.
Für Sicherheitseinstellungen des Linux-Servers:
Um das Passwort zu verschlüsseln, verwenden Sie das Tool „/usr/sbin/authconfig“, um die Passwort-Shadow-Funktion zu aktivieren und das Passwort zu verschlüsseln.
Um den Zugriff auf wichtige Dateien zu verbieten, rufen Sie die Linux-Befehlsschnittstelle auf und geben Sie an der Eingabeaufforderung Folgendes ein:
#chmod 600 /etc/inetd.conf //Dateiattribute auf 600 ändern
#chattr +I /etc/inetd.conf // Stellen Sie sicher, dass der Dateieigentümer Root ist
#chattr –I /etc/inetd.conf // Änderungen an dieser Datei beschränken
Um zu verhindern, dass ein Benutzer über den Befehl su zum Root-Benutzer wechselt, fügen Sie die folgenden zwei Zeilen am Anfang der su-Konfigurationsdatei, also im Verzeichnis /etc/pam.d/, hinzu:
Authentifizierung ausreichend /lib/security/pam_rootok.so debuggen
Authentifizierung erforderlich /lib/security/pam_whell.so group=wheel
Löschen Sie alle Sonderkonten
#userdel lp usw. Benutzer löschen
#groupdel lp usw. Löschen Sie die Gruppe, um nicht verwendete suid/sgid-Programme zu verhindern
#find / -type f (-perm -04000 - o –perm -02000 ) -execls –lg {} ;