2009-09-11 2 views
2

préférable de vérifier une constante définie, vérifiez l'URL, ou de toute autre façon ....Quels contrôles utiliser pour empêcher l'accès direct aux pages (en utilisant PHP)? Est-il

quelque chose comme

if(!defined(INCLUDED)) 

de

if($_SERVER['REQUEST_URI'] == $_SERVER['PHP_SELF']) 

Quels sont les moyens que vous vérifiez si un fichier a été accédé directement..également, est-il important d'empêcher l'accès direct aux pages ... (Je pense qu'un site devrait fonctionner de la façon dont il a été conçu, donc l'accès direct irait à l'encontre, mais)

+0

Êtes-vous la même personne qui a posté ici? http://stackoverflow.com/questions/1408201/redundancy-in-php-safer-or-unnecessary/1408263#1408263 J'ai posté une réponse à cette question qui répond à ce que vous demandez ici. – DisgruntledGoat

Répondre

2

Définir une constante est probablement la meilleure façon d'y parvenir, sans fouiller dans des tonnes de code ... Il suffit de définir une constante avant votre ligne d'inclusion et de vérifier si elle est définie dans le fichier inclus ...

fichier principal

<?php 
define("IS_INCLUDED",true); 
include "included_file.php"; 
?> 

included_file.php

<?php 
if(!defined("IS_INCLUDED")){ 
header("Location: error_page.php"); 
} 
?> 

De cette façon, s'ils accèdent à la page, La constante ne sera pas définie et ils seront redirigés vers où vous voulez qu'ils soient.

6

Si vous ne voulez pas qu'ils puissent être accessibles directement, vous n'avez pas besoin de pirater vos fichiers. Il suffit de les placer dans un répertoire en dehors du répertoire visible publiquement, et le public ne peut pas y accéder. Vos scripts PHP pourront toujours y accéder facilement.

+2

Autre point, si vous ne pouvez pas placer les fichiers en dehors du répertoire Web, protégez un répertoire en utilisant .htaccess et placez-les là. – MitMaro

4

Il existe trois approches de ce problème que je vois souvent/utilisation:

  1. Si le fichier est signifie ne pas charger directement via une URL, mettez-le dans un répertoire inclus (défini en php. ini) plutôt que sous la racine du document;
  2. Si vous ne pouvez pas faire (1) créer un ou plusieurs répertoires comme 'include' sous votre racine de document et en restreindre l'accès avec mod_rewrite; ou
  3. J'ai tendance à trouver que n'importe quel de mes fichiers inclus ne comporte que des fonctions de toute façon, peu importe si quelqu'un y accède directement ou non.

À titre d'exemple (2):

RewriteEngine On 
RewriteRule ^include/ [R=404,L] 

Cela envoie un fichier non trouvé erreur à toute tentative de frapper le include.

Questions connexes