10
votes

PHP - est "Inclure" la fonction sécurisée?

J'utilise la fonction "Inclure" (E.X. "Inclure 'Header2.PHP'" ou "Inclure 'classe.UserS.php'") ajouter l'en-tête ou la classe de session sur mon site Web. Je ne me souviens pas vraiment d'où, mais j'ai entendu dire que les hackers abusent, d'une manière ou d'une autre, cette "inclure", envoyant la fausse page incluse ou quelque chose comme ça. Donc, fondamentalement, j'aimerais savoir ce qu'il y a avec cette fonction "include", comment puis-je la protéger, comment l'abuser et s'il y a de meilleures solutions pour ce que je cherche.

Merci d'avance.


3 commentaires

Si une personne a accès à votre code PHP, ils sont sur votre serveur. Il ne sert à rien de sécuriser quelque chose qui est déjà compromis. Au lieu de cela, concentrez-vous sur la fermeture des points d'entrée par, par exemple, de fixer toutes les vulnérabilités d'injection SQL de votre demande.


Le but est que j'ai entendu dire que "incluent" quelque chose.php "est insécurité ou piratable, ainsi que des injections SQL. Est-ce vrai?


Tout est exploitable si vous l'utilisez de manière incorrecte. Tant que vous êtes inclure des fichiers PHP ING STATIC, vous n'avez vraiment rien à craindre dans cette zone.


7 Réponses :


2
votes

Inclure est sécurisé à condition que vous ne:

  1. Inclure un fichier distant comme www.someoneelsesssite.com/something.php
  2. Inclure un fichier d'un chemin issu du client. www.mysite.com/bad.php?path=oops/here/is/your/passwords/file
  3. Inclure un fichier d'une autre source éventuellement contaminée comme une base de données.

    2 et 3 techniquement ont la mise en garde que si vous interdisez . ou / ou sous Windows \ vous êtes probablement bien. Mais si vous ne savez pas pourquoi, vous n'en savez pas assez de cela pour le risquer. Même lorsque vous pensez que la base de données est en lecture seule ou autrement sécurisée, il est sage de ne pas supposer que si vous ne devez vraiment pas, ce qui n'est presque jamais.

    As Réponse de PP19DD souligne. Il est également essentiel que vous nommiez votre inclut avec l'extension .php. Si vous avez défini Apache (ou quel que soit le serveur Web que vous utilisez) pour analyser également un autre type de fichier en tant que PHP, c'est aussi sûr. Mais si vous ne savez pas avec certitude, utilisez .php exclusivement.


1 commentaires

@FRITSVANPAMPEN a accepté, mais en règle générale, j'essaie de répondre à ceux du point de vue que quiconque a besoin de demander à cela, n'est pas prêt à prendre des risques d'aucune sorte. Si une partie de votre code est «magique», vous ne devriez pas prendre de risques. (par magie, je veux dire que cela fonctionne basé sur un mécanicien que vous ne comprenez pas)



3
votes

Inclure peut être abusé si vous faites quelque chose comme ceci: xxx

puis appelez l'URL:

myscript.php? Page = index.php

Les attaquants peuvent ensuite remplacer index.php pour hxxp: //hackerz.ru/install_stuff.php et votre serveur sera volontiers exécuté IT.

Inclure est parfaitement sûr. Assurez-vous de toujours valider / échapper à votre entrée.


0 commentaires

1
votes

La meilleure chose à faire est de vous assurer que la page que vous essayez d'inclure existe d'abord. Les lacunes de sécurité réelles viennent lorsque votre page Include est traitée à partir d'une sorte d'entrée utilisateur, telle qu'une variable d'URL. ? Inclure = page.php code> tant que vous êtes prudent de ceux-ci, vous devriez aller bien.

if(is_file($file)) {
    //other code, such as user verification and such should also go here
    include $file;
}
else { die(); }


3 commentaires

Cela ne vous protégera pas contre quoi que ce soit. Votre fichier de mots de passe est un fichier, php.ini est un fichier, tout ce que les attaquants trouveraient, sont des fichiers.


@ Holide8N: Je n'essayais pas d'impliquer que c'était la seule chose à faire, mais que c'était une étape dans le processus. J'ai également inclus un commentaire sur l'insertion d'un autre code, "Vérification de l'utilisateur et telle". La vérification de l'utilisateur aide à garantir que aucune page sensible "membre" n'est accessible. L'autre code pourrait être une liste noire de fichier. Je ne sais pas pourquoi tu as révélé ma réponse lorsque votre réponse était tout aussi vague.


Les personnes qui ne savent pas sécuriser contre les attaques de trafiquant d'annuaire ne devraient pas tenter d'inclure des fichiers de manière dynamique dans toutes les conditions. Votre réponse suggère que la «meilleure» chose que vous puissiez faire est de vous assurer que le fichier existe. Les informations de sécurité pertinentes n'est pas vague, elle est absente. Je n'ai pas indiqué que vous vous blesser, et je vais changer si vous ajoutez les informations nécessaires. Et supprimez votre bowvote de ma réponse ou laissez un commentaire sur ce que vous pensez être vague.



4
votes

Le plus gros problème avec la notice change probablement Extension de nom de fichier de PHP à quelque chose qui ne se réalise pas automatiquement par le serveur Web. Par exemple- Bibliothèque.inc, ou config.InC. Invoquant ces fichiers avec un navigateur Web révélera le code au lieu de l'exécuter - et tous les mots de passe ou des astuces exploitables seront affichés.

comparer config.php qui pourrait avoir un mot de passe en elle avec config.inc . Tirer la configuration config.Indictrait dans la plupart des cas ce que le mot de passe de la base de données était.

Il existe des programmeurs qui utilisent des extensions de .inc pour les bibliothèques. Le principe est qu'ils ne seront pas dans un répertoire accessible par un serveur Web. Cependant, moins de programmeurs de sécurité paranoïaque peuvent vider ce fichier dans un répertoire Web pratique.

Sinon, assurez-vous que vous n'incluez pas de fichier soumis par une chaîne de requête en quelque sorte. Ex: inclure ($ _GET ['MENU_FILE']) <- C'est très faux.


2 commentaires

+1 Nice note sur les extensions de fichier pouvant être incluses en tant que code, mais lorsqu'il est chargé séparément dans le navigateur, exposera votre code.


Qu'entendez-vous par «invoquant ces fichiers avec un navigateur Web»? Dites que vous avez un serveur avec nom public "exemple.com". (1) Si quelqu'un sait qu'il y a un fichier dans le répertoire racine appelé "a.inc", peut-il simplement y regarder avec " http://example.com/a.inc "? (2) S'ils ne savent pas ce que les fichiers d'incing existent dans un répertoire donné, comment découvriraient-ils?



3
votes

Quelque chose de serveur (en supposant que votre serveur n'est pas compromis) est sûr. Faire ceci:

include "page.php"; 


2 commentaires

Remarque: En supposant que page.php est sécurisé. ;)


Bien sûr, à condition que le fichier référencé soit approuvé et sécurisé.



17
votes

Tout dépend de la manière dont vous l'appliquez. Si vous définissez spécifiquement le chemin, il est sécurisé. L'attaque pourrait arriver si vous autorisez la saisie de l'utilisateur à déterminer le chemin de fichier sans assainissement ni de contrôle.

insécurité stress> (Répertoire TRAVERSAL) P>

<?php 
include('./includes/somefile.php');
?>


0 commentaires

-2
votes

J'utilise cette méthode.

<?php include (dirname(__FILE__).'/file.php');


1 commentaires

J'espère que cela fonctionne pour vous, mais en faveur d'une meilleure réponse, vous pouvez en réalité Expliquer pourquoi cela fonctionne