Maison > Article > développement back-end > Comment PHP empêche-t-il les attaques par injection SQL ?
Configuration côté serveur
Sécurité, l'écriture de code PHP est un aspect, et la configuration PHP est très critique.
Nous avons installé PHP manuellement. Le fichier de configuration par défaut de PHP se trouve dans /usr/local/apache2/conf/php.ini. Notre chose la plus importante est de configurer le contenu de php.ini afin que nous puissions exécuter PHP de manière plus sûre. . Les paramètres de sécurité dans l'ensemble de PHP visent principalement à empêcher les attaques de phpshell et d'injection SQL. Discutons-en lentement. Nous utilisons d'abord n'importe quel outil d'édition pour ouvrir /etc/local/apache2/conf/php.ini Si vous l'installez d'une autre manière, le fichier de configuration peut ne pas se trouver dans ce répertoire.
(1) Activer le mode sans échec de PHP
Le mode sans échec de PHP est un mécanisme de sécurité intégré très important qui peut contrôler certaines fonctions de PHP, telles que system(), à en même temps, les autorisations de nombreuses fonctions d'exploitation de fichiers sont contrôlées et certains fichiers clés ne sont pas autorisés, comme /etc/passwd. Cependant, le php.ini par défaut n'ouvre pas le mode sans échec :
<.>
safe_mode = on
(2) Sécurité du groupe d'utilisateursLorsque safe_mode est activé, safe_mode_gid est désactivé, le script php peut accéder au fichier et les utilisateurs du même groupe peuvent également accéder le fichier .
Il est recommandé de le définir sur :
safe_mode_gid = offS'il n'est pas défini, nous ne pourrons peut-être pas exploiter les fichiers du répertoire de notre site Web serveur, par exemple, lorsque nous en avons besoin pour exploiter les fichiers.
(3) Répertoire personnel pour exécuter des programmes en mode sans échec Si le mode sans échec est activé mais que vous souhaitez exécuter certains programmes, vous pouvez spécifier le programme à exécuter exécuté Répertoire principal :
safe_mode_exec_dir = D:/usr/binGénéralement, il n'est pas nécessaire d'exécuter un programme, il est donc recommandé de ne pas exécuter le répertoire du programme système. Vous pouvez pointer vers un répertoire puis copier le programme dont vous avez besoin. à exécuter, tel que :
safe_mode_exec_dir = D:/tmp/cmdCependant, je recommande de n'exécuter aucun programme, vous pouvez alors pointer vers notre répertoire web :
safe_mode_exec_dir = D:/usr/www
( 4) Inclure les fichiers en mode sans échecSi vous souhaitez inclure certains fichiers publics en mode sans échec, alors modifiez les options :
safe_mode_include_dir = D:/usr/www/include/En fait, généralement les fichiers inclus dans les scripts php ont été écrits par le programme lui-même. Il peut être défini en fonction de besoins spécifiques.
(5) Contrôlez les répertoires auxquels les scripts PHP peuvent accéder Utilisez l'option open_basedir pour contrôler que les scripts PHP ne peuvent accéder qu'aux répertoires spécifiés, ce qui peut empêcher les scripts PHP de accéder aux répertoires auxquels il ne faut pas accéder Les fichiers consultés limitent les dommages de phpshell dans une certaine mesure Nous pouvons généralement le configurer pour accéder uniquement au répertoire du site Web :
open_basedir = D:/usr/www
(6) Désactivez. fonctions dangereuses si Si le mode sans échec est activé, l'interdiction des fonctions n'est pas nécessaire, mais nous la considérons quand même pour des raisons de sécurité. Par exemple, si nous ne voulons pas exécuter des fonctions PHP telles que system() qui peuvent exécuter des commandes, ou des fonctions telles que phpinfo() qui peuvent afficher des informations PHP, alors nous pouvons les bannir :
disable_functions = system,passthru,exec,shell_exec,popen,phpinfoSi vous souhaitez interdire toute opération sur les fichiers et les répertoires, vous pouvez désactiver de nombreuses opérations sur les fichiers.
disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir, rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chownCe qui précède ne répertorie que certaines des fonctions de traitement de fichiers couramment utilisées. Vous pouvez également combiner la fonction de commande d'exécution ci-dessus avec cette fonction pour résister à la plupart des phpshell.
(7) Désactiver la fuite des informations de version PHP dans l'en-tête http Afin d'empêcher les pirates d'obtenir les informations de version PHP sur le serveur, nous pouvons désactivez la fuite de ces informations dans l'en-tête http En-tête :
expose_php = OffPar exemple, lorsqu'un hacker telnet www.12345.com 80, il ne pourra pas voir les informations PHP.
(8) Désactiver l'enregistrement des variables globales Les variables soumises en PHP, y compris les variables soumises via POST ou GET, seront automatiquement enregistrées en tant que variables globales et seront accessibles directement. Il s'agit d'un. Le serveur est très dangereux, nous ne pouvons donc pas le laisser être enregistré en tant que variable globale, nous désactivons donc l'option d'enregistrement de la variable globale :
register_globals = OffBien sûr, s'il est défini comme ceci, alors vous doit l'utiliser lors de l'obtention de la variable correspondante. Des méthodes raisonnables, telles que l'obtention de la variable var soumise par GET, puis utiliser $_GET['var'] pour l'obtenir, les programmeurs PHP doivent y prêter attention.
(9) Activez magic_quotes_gpc pour empêcher l'injection SQL L'injection SQL est un problème très dangereux. Elle peut entraîner l'invasion du backend du site Web ou la chute de l'ensemble du serveur, alors soyez prudent. . Il y a un paramètre dans php.ini :
magic_quotes_gpc = OffCeci est désactivé par défaut. S'il est activé, il convertira automatiquement les requêtes SQL soumises par l'utilisateur, telles que la conversion de ' en ', etc. C'est la prévention de l'injection SQL qui joue un rôle majeur. Par conséquent, nous vous recommandons de le définir sur :
magic_quotes_gpc = On
(10) Contrôle des messages d'erreurGénéralement, PHP affichera une erreur lorsqu'il n'est pas connecté à la base de données ou sous dans d'autres circonstances. Messages d'erreur généraux Il contiendra les informations de chemin actuel du script php ou de l'instruction SQL de requête. Ce type d'informations n'est pas sûr après avoir été fourni aux pirates, il est donc généralement recommandé que le serveur désactive les invites d'erreur :
display_errors = OffSi vous Mais si vous souhaitez afficher les informations d'erreur, vous devez définir le niveau d'affichage de l'erreur, par exemple, afficher uniquement les informations au-dessus de l'avertissement :
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视频教程
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!