Heim >Backend-Entwicklung >PHP-Problem >Wie verhindert PHP SQL-Injection-Angriffe?
Konfiguration auf der Serverseite
Sicherheit, das Schreiben von PHP-Code ist ein Aspekt, und die PHP-Konfiguration ist sehr wichtig.
Wir haben PHP manuell installiert. Die Standardkonfigurationsdatei von PHP befindet sich in /usr/local/apache2/conf/php.ini. Unser Wichtigstes ist, den Inhalt in php.ini zu konfigurieren, damit wir PHP sicherer ausführen können . Die Sicherheitseinstellungen im gesamten PHP dienen hauptsächlich dazu, Angriffe durch PHPShell und SQL-Injection zu verhindern. Lassen Sie uns das langsam besprechen. Wir verwenden zunächst ein beliebiges Bearbeitungstool, um /etc/local/apache2/conf/php.ini zu öffnen. Wenn Sie es auf andere Weise installieren, befindet sich die Konfigurationsdatei möglicherweise nicht in diesem Verzeichnis.
(1) Aktivieren Sie den abgesicherten Modus von PHP
Der abgesicherte Modus von PHP ist ein sehr wichtiger integrierter Sicherheitsmechanismus, der einige Funktionen in PHP steuern kann, wie z. B. system(), At Gleichzeitig werden die Berechtigungen vieler Dateioperationsfunktionen kontrolliert, und bestimmte Schlüsseldateien wie /etc/passwd sind nicht zulässig. Die Standard-php.ini öffnet sie jedoch nicht:
safe_mode = on
(2) Benutzergruppensicherheit
Wenn „safe_mode“ aktiviert ist, ist „safe_mode_gid“ deaktiviert, dann kann das PHP-Skript auf die Datei zugreifen, und auch Benutzer in derselben Gruppe können darauf zugreifen die Datei.
Es wird empfohlen, Folgendes festzulegen:
safe_mode_gid = off
Wenn es nicht festgelegt ist, können wir möglicherweise nicht auf die Dateien im Verzeichnis unserer Server-Website zugreifen, wenn wir sie benötigen Dateien bedienen.
(3) Home-Verzeichnis zum Ausführen von Programmen im abgesicherten Modus
Wenn der abgesicherte Modus aktiviert ist, Sie aber bestimmte Programme ausführen möchten, können Sie das auszuführende Programm angeben ausgeführtes Hauptverzeichnis:
safe_mode_exec_dir = D:/usr/bin
Im Allgemeinen besteht keine Notwendigkeit, ein Programm auszuführen. Daher wird empfohlen, das Systemprogrammverzeichnis nicht auszuführen. Sie können auf ein Verzeichnis verweisen und dann das benötigte Programm kopieren auszuführen, wie zum Beispiel:
safe_mode_exec_dir = D:/tmp/cmd
Ich empfehle jedoch, kein Programm auszuführen, dann können Sie auf unser Webverzeichnis verweisen:
safe_mode_exec_dir = D:/usr/www
( 4) Dateien im abgesicherten Modus einschließen
Wenn Sie einige öffentliche Dateien im abgesicherten Modus einschließen möchten, ändern Sie die Optionen:
safe_mode_include_dir = D:/usr/www/include/
Tatsächlich im Allgemeinen die in PHP-Skripten enthaltenen Dateien wurden vom Programm selbst geschrieben. Dies kann je nach Bedarf eingestellt werden.
(5) Steuern Sie die Verzeichnisse, auf die PHP-Skripte zugreifen können.
Verwenden Sie die Option open_basedir, um zu steuern, dass PHP-Skripte nur auf bestimmte Verzeichnisse zugreifen können, was PHP-Skripte daran hindern kann Zugriff auf Verzeichnisse, auf die nicht zugegriffen werden sollte. Die abgerufenen Dateien begrenzen den Schaden von PHPShell bis zu einem gewissen Grad. Wir können es generell so einstellen, dass nur auf das Website-Verzeichnis zugegriffen wird:
open_basedir = D:/usr/www
(6) Ausschalten gefährliche Funktionen
Wenn der abgesicherte Modus aktiviert ist, ist ein Funktionsverbot nicht erforderlich, wir ziehen es jedoch aus Sicherheitsgründen in Betracht. Wenn wir beispielsweise das Gefühl haben, dass wir keine PHP-Funktionen wie system() ausführen möchten, die Befehle ausführen können, oder Funktionen wie phpinfo(), die PHP-Informationen anzeigen können, können wir sie verbieten:
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
Wenn Sie Datei- und Verzeichnisvorgänge verbieten möchten, können Sie viele Dateivorgänge deaktivieren.
disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir, rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
Oben sind nur einige der häufig verwendeten Dateiverarbeitungsfunktionen aufgeführt. Sie können die obige Ausführungsbefehlsfunktion auch mit dieser Funktion kombinieren, um den meisten PHP-Shells zu widerstehen.
(7) Deaktivieren Sie den Verlust von PHP-Versionsinformationen im HTTP-Header
Um zu verhindern, dass Hacker die PHP-Versionsinformationen auf dem Server erhalten, können wir dies tun Schalten Sie das Durchsickern dieser Informationen im HTTP-Header aus. Header:
expose_php = Off
Wenn ein Hacker beispielsweise www.12345.com 80 per Telnet erreicht, kann er keine PHP-Informationen sehen.
(8) Deaktivieren Sie die Registrierung globaler Variablen.
In PHP übermittelte Variablen, einschließlich mit POST oder GET übermittelter Variablen, werden automatisch als globale Variablen registriert und können direkt aufgerufen werden Der Server ist sehr unsicher, daher können wir nicht zulassen, dass er als globale Variable registriert wird. Deshalb deaktivieren wir die Option zur Registrierung globaler Variablen:
register_globals = Off
Wenn es so eingestellt ist, müssen Sie es natürlich tun Verwenden Sie es, wenn Sie die entsprechende Variable abrufen, z. B. die von GET übermittelte Variable var, und verwenden Sie dann $_GET['var'], um sie abzurufen.
(9) Aktivieren Sie magic_quotes_gpc, um SQL-Injection zu verhindern
SQL-Injection ist ein sehr gefährliches Problem. Im kleinsten Fall kann das Backend der Website angegriffen werden, oder im schlimmsten Fall das gesamte Der Server kann zusammenbrechen. Seien Sie also vorsichtig. Es gibt eine Einstellung in php.ini:
magic_quotes_gpc = Off
Diese ist standardmäßig deaktiviert. Wenn sie aktiviert ist, werden vom Benutzer übermittelte SQL-Abfragen automatisch konvertiert, z. B. „ in „ usw Dabei spielt die Verhinderung der SQL-Injection eine wichtige Rolle. Daher empfehlen wir die Einstellung auf:
magic_quotes_gpc = On
(10) Fehlermeldungssteuerung
Im Allgemeinen gibt PHP einen Fehler aus, wenn es nicht mit der Datenbank oder darunter verbunden ist Unter anderen Umständen werden die aktuellen Pfadinformationen des PHP-Skripts oder der SQL-Anweisung der Abfrage angezeigt. Diese Art von Informationen sind nach der Bereitstellung für Hacker nicht sicher. Daher wird im Allgemeinen empfohlen, dass der Server die Fehlermeldungen deaktiviert:
display_errors = Off
Wenn Sie aber Fehlerinformationen anzeigen möchten, müssen Sie die Ebene der Fehleranzeige festlegen, z. B. nur Informationen oberhalb der Warnung anzeigen:
error_reporting = E_WARNING & E_ERROR
当然,我还是建议关闭错误提示。
(11) 错误日志
建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因:
log_errors = On
同时也要设置错误日志存放的目录,建议根apache的日志存在一起:
error_log = D:/usr/local/apache2/logs/php_error.log
注意:给文件必须允许apache用户的和组具有写的权限。
MYSQL的降权运行
新建立一个用户比如mysqlstart
net user mysqlstart fuckmicrosoft /add net localgroup users mysqlstart /del
不属于任何组
如果MYSQL装在d:\mysql ,那么,给 mysqlstart 完全控制 的权限
然后在系统服务中设置,MYSQL的服务属性,在登录属性当中,选择此用户 mysqlstart 然后输入密码,确定。
重新启动 MYSQL服务,然后MYSQL就运行在低权限下了。
如果是在windos平台下搭建的apache我们还需要注意一点,apache默认运行是system权限
这很恐怖,这让人感觉很不爽.那我们就给apache降降权限吧。
net user apache fuckmicrosoft /add net localgroup users apache /del
ok.我们建立了一个不属于任何组的用户apche。
我们打开计算机管理器,选服务,点apache服务的属性,我们选择log on,选择this account,我们填入上面所建立的账户和密码,
重启apache服务,ok,apache运行在低权限下了。
实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个单独能读写的用户。
这也是当前很多虚拟主机提供商的流行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了。
推荐视频教程:PHP视频教程
Das obige ist der detaillierte Inhalt vonWie verhindert PHP SQL-Injection-Angriffe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!