PHP: Comment faire Pour Désactiver les Fonctions Dangereuses
Comment puis-je désactiver l'dangereux eval fonction? Peut-être que le fait à l'aide de ini_set fonction?
Aussi comment faire pour désactiver les fonctions suivantes? Peut-on désactiver à l'aide de ini_set fonction?
allow_url_fopen
allow_url_include
exec
shell_exec
system
passthru
popen
stream_select
eval est l'un des plus dangereux de la fonction que les méchants peuvent utiliser pour exploiter les choses. Il devrait y avoir un mécanisme permettant de les désactiver sans avoir recours à php.ini fichier, mais il est doit être fait par programmation.
Bien, les gars, je suis à la recherche d'une réponse de ce qui suggère la désactivation de ces dangereux belle boursiers sans aller jusqu'à php.ini fichier; je veux dire comment les désactiver au moment de l'exécution, ou par programmation?
Merci d'avance....
Mise à jour
Quelqu'un a entendu parler de PHP Shell Délinquant Script? Il est principalement utilisé la fonction eval pour l'exploiter. Les pirates sont en mesure d'exécuter leur code PHP sur votre site.
Ma question est que je ne veux pas désactiver la fonction eval à partir de php.fichier ini tout à fait. Par exemple, j'ai développé mon propre framework MVC. Maintenant, le cadre, les utilisateurs peuvent spécifier à partir de cadres de fichier de config si eval (et d'autres) fonction doit être désactivée ou non. C'est donc laissée au choix de l'encadrement des utilisateurs. Une fois ils précisent pour le désactiver, je devrais être en mesure de désactiver la fonction eval par programmation.
Donc, c'est le scénario. À la recherche pour obtenir des réponses/solutions.
Merci Encore.
- Harvey: je ne comprends pas pourquoi vous avez supprimé user1438726 réponse, d'autant que l'on n'a donné aucune justification. Si ce qu'il dit est correct, c'est un outil très utile de répondre. A été sa réponse erronée ou avez-vous simplement en désaccord avec elle?
- l'actuel accepté de répondre par Pascal est 100% incorrect. eval ne peut pas être désactivé à l'aide de
disable_functions
que c'est une construction du langage plutôt que d'une fonction réelle. S'il vous plaît changer la accepté de répondre, et c'est une erreur dangereuse qui seront laissant de nombreux à considérer qu'ils ont désactivé la fonction eval() quand ils n'ont pas. eval
n'est pas une fonction.
Vous devez vous connecter pour publier un commentaire.
Pour désactiver les fonctions, principalement pour des raisons de sécurité, vous pouvez utiliser le
disable_functions
directive dans votrephp.ini
fichier de configuration.Mais, comme les états de documentation :
Je suppose que c'est trop "interne" à être configurable n'importe où ailleurs qu'en PHP... Et comme c'est lié à la sécurité, c'est à l'administrateur système de configurer.
Encore, la meilleure mesure de sécurité est d'écrire nettoyer/code de sécurité, filtre à l'entrée de tous, échapper à toutes les sorties... Et de ne pas laisser quelqu'un d'exécuter son propre code sur votre serveur !
eval
n'est pas une fonction. C'est une construction du langage". Le bug a été aussi fermés que " pas un bogue, d'où cette réponse est correctephp -ddisable_functions=curl_exec,stream_get_contents vendor/bin/phpunit tests/foo
pour forcer tous les tests pour se moquer de dépendances correctement.Peur que vous êtes un peu coincé à l'aide de php.ini pour désactiver la plupart de ceux-ci. Cependant, il y a pire.
eval()
est techniquement pas une fonction, c'est une construction du langage, de sorte qu'il NE peut pas être désactivé à l'aide dedisable_functions
. Pour ce faire, vous devez installer quelque chose comme Suhosin et le désactiver à partir de là.Un bon webmaster doit envisager un examen de sécurité pour être une partie essentielle de la configuration du site. Ne pas essayer de complètement abstrait de cette distance, les gens sont paresseux assez sur la sécurité déjà. Si vous allez utiliser des outils (comme un hébergeur), vous devez prendre l'initiative d'avoir au moins une connaissance superficielle de la façon de gérer de façon responsable.
Cela dit, il ya quelques autres choses que vous pouvez faire à gravement infirme la plupart des tentatives d'intrusion, y compris:
-Désactiver
base64_decode()
à l'aide dedisable_functions
. Maintenant, il ya des façons de contourner cela, mais la grande majorité des hack scripts sont de nature générique, et cela cassera environ 95% d'entre eux comme ils ont besoin de l'existence de ces DEUX fonctions dans l'ordre pour fonctionner correctement. Cela ne signifie pas que votre serveur ne peut pas être piraté, mais dans la plupart des cas, il serait de payer les frais généraux de le faire manuellement en reniflant votre serveur pour les vulnérabilités, et la plupart des pirates sont jouer le nombre et n'est pas eu le temps pour ça (REMARQUE: certains pirates n'ont le temps pour ça, ce n'est pas une balle magique par lui-même).-Filtre toutes les entrées pour le programme commun d'autres d'exploiter les modèles de chaîne comme
<?php
, qui est fréquemment utilisé à grincer par une balise d'ouverture php inaperçu. Il en existe plusieurs modèles. La meilleure pratique est de mettre en liste blanche des caractères spécifiques et de rejeter toutes les autres par l'entrée de base. À tout le moins, filtre à celle-ci, terminateur null, et possible d'injection sql par des chaînes telles que'; --
(ne présumez pas que simplement utiliser pdo ou mysqli va filtrer TOUTE tentative d'injection, il y a encore quelques moyens d'en sortir, même si vous êtes correctement à l'aide de déclarations préparées à l'avance).-Tous les répertoires qui ne servent qu'médias devraient avoir tous les script d'accès est désactivé, et tous les téléchargements et les médias devraient être placés que dans un tel répertoire. Il est préférable d'indiquer seulement le support acceptable plutôt que la liste noire des scripts, comme il ya un certain nombre de façons d'exécuter un fichier de script (par exemple:
php
,php5
,phtml
, etc) qui, individuellement, peuvent ou peuvent ne pas être disponibles sur le serveur de l'environnement. Vous pouvez faire cela avec un simple .htaccess placé dans le répertoire de médias similaire à ceci:De la présente partie peuvent être dynamiquement par php, de sorte que votre application sera capable de sécurisation des répertoires sensibles d'une manière similaire à ce qui peut atténuer une grande partie de pirate de la douleur, comme c'est généralement négligé. En général, je ajouter un semblable .htaccess pour presque tous les sites WordPress, je travaille dans le répertoire uploads, et ont souvent demandé pourquoi ce n'est pas fait en dehors de la boîte, comme il bloque beaucoup de tentatives d'intrusion et de ne pas interférer avec l'application d'une quelconque manière que j'ai remarqué.
Malheureusement, si vous n'êtes pas sur un serveur apache, vous aurez besoin de trouver une autre solution (sur IIS, il est probablement un équivalent, mais je ne suis pas au courant de ce qu'il serait personnellement).
-Vous devez également configurer votre .htaccess (ou web.config/etc) et de désactiver toutes les méthodes d'accès qui ne sont pas nécessaires pour votre application spécifique. Si vous ne faites pas les services web RESTful, il n'y a vraiment aucune raison de permettre
PUT
ouDELETE
, vous devriez certainement également désactiverTRACE
, et probablement aussi n'a pas vraiment de raison de quitterOPTIONS
ouHEAD
soit activé. Il convient également de mentionner que tous les non-reconnu méthodes de connexion par défaut résoudre àGET
, ce qui signifie qu'à partir de la ligne de commande je peux faire quelque chose comme:Dans cet exemple,
BOOGITY
est vide de sens, cependant, votre serveur va interpréter cela comme:Toutefois, votre demande ne sera probablement pas.
Afin d'éviter cela, vous devez configurer votre serveur pour accepter uniquement les
GET
commeGET
, et de ne pas être l'option par défaut.Dans la plupart des cas, le point principal est de ne pas rendre difficile à exécuter php modèles dans votre environnement, le point est d'empêcher l'inclusion de voyous code (que ce soit localement ou à l'extérieur) afin de ne pas devenir un problème. Si vous êtes en permettant l'installation de modules ou dans votre CMS, bâclée programmeurs finira par créer des exploits, qui vous ne peut pas vraiment y faire grand chose mis à part l'application assez strictes de l'API de paramètres qui font qu'il est très difficile de le faire mal, mais il ne peut jamais être rendue impossible. Ne jamais sous-estimer la capacité d'une large hack de la boutique ou de l'auto-proclamé "php" ninja diligemment de travailler avec votre système dans la plus grande insécurité ou de non-conformité possible de créer des vulnérabilités, et d'inventer n'importe quel nombre de rond-point des hacks pour le faire, qui sont en fait plus difficile à enlever que juste faire de la bonne façon.
/sécurité diatribe.
suhosin
module récemment Alpine Linux pkgs.alpinelinux.org/...En bref: vous ne pouvez pas le faire.
Mais je pense que tu ne comprends pas vraiment comment eval et ces fonctions sont exploités. Le problème se produit lorsque les programmeurs ne pas désinfecter correctement les ARGUMENTS qui sont passés à eux.
Le php shell délinquant script que vous avez mentionné, c'est juste un simple script PHP en passant les arguments de ces fonctions. Mais les assaillants avaient déjà un moyen d'injection/téléchargement du script malveillant. Si vous n'êtes pas en utilisant ces fonctions, ni le passage d'arguments à partir de la saisie de l'utilisateur, les attaquants ne peuvent pas exécuter arbitrairement du code sur votre serveur à l'aide de la fonction eval() ou de la famille.
Allez-vous être l'hôte de ce cadre de vos utilisateurs? Si vous êtes en permettant aux utilisateurs de télécharger et d'exécuter le code, alors vous avez un gros problème dans vos mains.
Lire à propos exécution de code à distance et à distance/local file inclusion ici pour en savoir plus sur les attaques liées à cela: Commune de PHP vulnérabilités
.exe
. Je n'ai aucune idée de comment ces fichiers est arrivé là parce que je n'ai pas de script servant des téléchargements. Par conséquent, le hacker doit avoir trouvé quelques trous de sécurité à télécharger sur mon serveur Apache. Je suis un noob à la mise en place de serveurs, mais je suis à la recherche de moyens pour les corriger.La disable_functions directive est disponible uniquement dans le php.ini de configuration.
Pour désactiver les fonctions au moment de l'exécution ne serait pas beaucoup de sens, puisque vous allez être en mesure de modifier les handicapés de la fonction de liste au moment de l'exécution de ré-activer des fonctions ainsi.
ini_set('disable_functions', '');
! (et il prend tout son sens :p)Vous pouvez désactiver la fonction eval par https://github.com/mk-j/PHP_diseval_extension et obtient autour de la question de suhosin pas être php7 compatible/stable.
Ajoutez cette ligne à votre php.ini (vous la Recherche pour "disable_functions')
Puis redémarrez votre php service (apache ou de php-fpm)