[URL Rewriting] Comment empêcher le contournement?

Nouveau WRInaute
Bonjour,

J'ai mis en place un système d'url-rewriting sur mon site. Voici le code du htaccess :

Code:
AddType x-mapp-php5 .php

RewriteEngine on

# redirige les urls sans les www vers celle avec
RewriteCond %{HTTP_HOST} !^www\.puissance-info\.com [NC]
RewriteRule (.*) http://www\.puissance-info\.com/$1 [QSA,R=301,L]

# http://www.puissance-info.com/
RewriteRule ^$ /index.php?section=accueil&action=index&id=&page= [L]

# ex: http://www.puissance-info.com/presentation/
RewriteRule ^([_a-zA-Z]+)[-_/0-9a-zA-Z]*/$ /index.php?section=$1&action=index&id=&page= [L]

# ex: http://www.puissance-info.com/creation_sites/basic.html
RewriteRule ^([_a-zA-Z]+)[-_/0-9a-zA-Z]*/([_a-zA-Z]+)-?([0-9]*)-?p?([0-9]*)\.html$ /index.php?section=$1&action=$2&id=$3&page=$4 [L]

# accès à l'admin
RewriteRule ^admin/([_a-zA-Z]+)?[-_/0-9a-zA-Z]*/([_a-zA-Z]+)-?([0-9]*)-?p?([0-9]*)\.html$ /index.php?section=admin_$1&action=$2&id=$3&page=$4 [L]


Je pense que mes règles sont écrites correctement, et le résultat est celui attendu sur le site. Par contre, je voudrais maintenant empêcher l'utilisation d'url ne répondant pas à ces règles (par exemple accès direct à un fichier du serveur, ou encore accès à une page sans l'utilisation des url réécrites). Comment pourrais-je mettre ça en place?

Merci d'avance pour vos réponses!
 
WRInaute passionné
avec le code suivant au début de chaque page :
Code:
$url_attendue = ... ; //(avec les paramètres éventuels)
$url_demande = str_replace($_ENV['SCRIPT_URL'], $_ENV['REQUEST_URI'], $_ENV['SCRIPT_URI']);
if ($url_demande <> $url_attendue) {
	header("Status: 301 Moved Permanently", false, 301);
	header("Location: $url_attendue");
	exit;
}
 
WRInaute passionné
Helldream a dit:
accès à une page sans l'utilisation des url réécrites
Juste par curiosité, j'aimerais savoir comment c'est possible. :eek:

Car l'url rewriting permet justement de ne pas afficher les variables, donc logiquement j'aurais dit qu'il n'est pas possible d'avoir accès à une page sans l'utilisation de l'url réécrite ...
 
WRInaute discret
Ben si, l'URL avec les paramètres fonctionne, il faut éviter qu'elle ait des liens (ça arrive ou arrivait qu'il y ait des liens non-réécrites sur ce forum pour les pages 2 et + des sujets). Faut peut-être aussi interdire le vrai .php (si les URLs réécrites ne le mentionnent plus) par robots.txt...
 
WRInaute accro
Pandore a dit:
Helldream a dit:
accès à une page sans l'utilisation des url réécrites
Juste par curiosité, j'aimerais savoir comment c'est possible. :eek:
du genre : je sais qu'il utilise tel script d'annuaire, alors je vais lui envoyer une requête www.example.com/index.php?do=include&url=monurl
je sais, comme j'avais changé, sciemment les noms des scripts et des variables, j'en ai vu arriver dans mes logs de telles requêtes. :twisted:
 
Nouveau WRInaute
Merci de vos réponses, cependant le problème reste entier ^^.

webmasterlamogere> Hélas, je ne peux pas faire comme cela : la structure de mon site est telle que toutes mes pages passent par un controleur unique : index.php. Il serait donc très difficile de mettre en place un contrôle php sur cette page...
De plus, mon soucis n'est pas vraiment de faire une redirection vers les pages dont l'url a été réécrite, mais bien d'interdire l'usage de n'importe quelle url n'utilisant pad les masques définis (pour une question de sécurité entre autre).

Pandore> Prenons mon htacces mis ci dessus. Tu peux appeler ma page présentation de plusieurs façons : http://.../presentation/ (url réécrite) ou http://.../index.php?section=presentati ... &id=&page= (url non-réécrite). Alors qu'à la 1e url, je peux définir un masque précis (par exemple que des lettres pour le choix de la section), pour le second cas, l'utilisateur est libre de mettre du javascript dans la variable section...

lolo06> oui en effet, c'est certain qu'il faut éviter d'utiliser les url non réécrites. Mais le soucis est qu'un utilisateur peut toujours essayer de passer par dessus ton url-rewriting. Ca peut être un robot qui a trouvé un lien non réécrit, mais aussi un piratin qui veux essayer de mettre n'importe quoi comme valeur dans les variables GET, et qui aimerait bien ne pas être embêté par tes règles de réécriture ^^

Je pensais rajouter une règle dans le fichier htaccess pour empêcher l'appel de fichiers, et l'utilisation d'url non réécrites, mais je ne sais pas trop comment faire :S

Un truc du genre "si aucune des règles citées ne s'applique, affiche une page d'erreur quelle que soit l'url demandée"
 
WRInaute passionné
dans ton rewriting, tu rajoute &rewriting=1, si cette variable n'existe pas, ca veut dire que le rewriting n'est pas appliqué alors tu redirige vers la bonne page en rewriting.

exemple:

RewriteRule ^([_a-zA-Z]+)[-_/0-9a-zA-Z]*/$ /index.php?section=$1&action=index&id=&rewriting=1 [L]
 
WRInaute passionné
Leonick a dit:
du genre : je sais qu'il utilise tel script d'annuaire, alors je vais lui envoyer une requête www.example.com/index.php?do=include&url=monurl
ah oui ! Effectivement, je n'avais pas pensé à ce cas particuliers ... :p

lolo06 a dit:
Ben si, l'URL avec les paramètres fonctionne
Helldream a dit:
Prenons mon htacces mis ci dessus. Tu peux appeler ma page présentation de plusieurs façons : http://.../presentation/ (url réécrite) ou http://.../index.php?section=presentati ... &id=&page= (url non-réécrite).
Ben oui, ça je sais et c'est normal. Les "2" pages "existent" car l'une est définie par le .htaccess et l'autre est présente physiquement sur le serveur.

lolo06 a dit:
ça arrive ou arrivait qu'il y ait des liens non-réécrites sur ce forum pour les pages 2 et + des sujets
Oui, c'est toujours le cas, je viens de vérifier. C'est surement un choix d'Olivier que de mettre uniquement que la première page des sous-forums rewritée. Car logiquement une page rewritée ne fait pas apparaitre le nom des variables utilisées :) Ce qui permet de pouvoir faire la manip décrite par Leonick plus haut par exemple :lol:
 
Discussions similaires
Haut