benoit* Posté 1 Novembre 2006 Posté 1 Novembre 2006 Bonjour, dans un /dossier/ je dispose d'uun script php (fichier.php) et d'un fichier .htaccess Un urlrewiting dans le fichier .htaccess permet de protéger le dossier chez mon hébergement principal cela fonctionne paafaitement: Options +FollowSymlinksRewriteEngine onRewriteCond %{REQUEST_URI} !^(.*)/fichier.php$RewriteRule ^(.*)$ fichier.php?path=$1 [QSA,L,NS] mais=>Je souhaite simplement dupliquer et déplacer le /dossier/ contenant le fichier.php et son .htaccess sur un autre hébergement chez OVH ( 90 mutualisé) Les régles d'urlrewiting sont différentes et spéciales chez cet hébergeur OVH et je n'arrive pas à trouver la bonne formule pour retrouver mes fonctions... j'ai essayé sans "Options +FollowSymlinks ", de mettre des slashs un peu partout, j'ai essayé aussi en rajouant /dossier/fichier.php sans succès... L'un d'entre-vous, aimables lecteurs, pourrait-il m'aider ? Cordialement
xgamer Posté 1 Novembre 2006 Posté 1 Novembre 2006 je crois que les regles d'url rewriting sont tout a fait standard chez ovh . mais justement moi aussi en ce moment j'essaye de faire quelque chose avec (ovh 300gp) et j'y arrive pas .
Remi Posté 1 Novembre 2006 Posté 1 Novembre 2006 (modifié) La seule particularité chez OVH, c'est que le second paramètre des rewriterule doit être renseigné en 'base relative', c'est à dire avec le chemin complet depuis la racine du domaine et donc commencer par un slash Pour ton cas, je ferais : RewriteEngine onRewriteCond %{REQUEST_URI} !fichier.php$RewriteRule ^(.*)$ /fichier.php?path=$1 [QSA,L,NS] (si ton fichier.php est bien à la racine du domaine, sinon il faut rajouter le chemin) Modifié 1 Novembre 2006 par Remi
benoit* Posté 1 Novembre 2006 Auteur Posté 1 Novembre 2006 La seule particularité chez OVH, c'est que le second paramètre des rewriterule doit être renseigné en 'base relative', c'est à dire avec le chemin complet depuis la racine du domaine et donc commencer par un slash Pour ton cas, je ferais : RewriteEngine onRewriteCond %{REQUEST_URI} !fichier.php$RewriteRule ^(.*)$ /fichier.php?path=$1 [QSA,L,NS] (si ton fichier.php est bien à la racine du domaine, sinon il faut rajouter le chemin) Bonsoir, Merci pour ton info le fichier php est dans le dossier ( /www/dossier/ ) avec le .htaccess A ton avis, je dois rajouter home/login/www/dossier/ ou le http://www/site.com/dossier/ ? je vois que tu as changé le code !^(.*)/fichier.php$ en !^(.*)!fichier.php$ ? tu peux m'indiquer pourquoi ? le plus rageant, c'est que mon htaccess fonctionne dans son dossier sur un autre hébergeur Il suffit que je doive simplement copier/coller le dossier vers OVH pour ne plus obtenir l'objectif... Merci pour tes précisions cordialement
Remi Posté 1 Novembre 2006 Posté 1 Novembre 2006 A ton avis, je dois rajouter home/login/www/dossier/ ou le http://www/site.com/dossier/ ? Ni l'un, ni l'autre... (le premier est le chemin depuis la racine du serveur alors que le second est une url fantaisiste...) Il faut le chemin depuis la racine du domaine, donc: RewriteEngine onRewriteCond %{REQUEST_URI} !/fichier\.php$RewriteRule ^(.*)$ /dossier/fichier.php?path=$1 [QSA,L,NS] Sinon, j'avais effectivement simplifié ta condition parce que je ne savais pas si tu étais à la racine. De toutes façon ^(.*) ne sert strictement à rien dans une ligne condition... tu peux toutefois le laisser si tu trouves que cela fait plus joli.
benoit* Posté 1 Novembre 2006 Auteur Posté 1 Novembre 2006 Ni l'un, ni l'autre... (le premier est le chemin depuis la racine du serveur alors que le second est une url fantaisiste...) Il faut le chemin depuis la racine du domaine, donc: RewriteEngine onRewriteCond %{REQUEST_URI} !/fichier\.php$RewriteRule ^(.*)$ /dossier/fichier.php?path=$1 [QSA,L,NS] bonsoir, Hélas... malgré tes indications et un copier coller: echec De toutes façon ^(.*) ne sert strictement à rien dans une ligne condition... tu peux toutefois le laisser si tu trouves que cela fait plus joli. disons que je ne maîtrise rein du tout et je partais du principe que le code .htaccess initial fonctionne chez l'autre hébergeur je récapitule: J'ai le fichier.php et le .htaccess dans un dossier Ce dossier est placé à la racine du site je colle le code dans le .htaccess j'ai fait un test simple de rewriting poure m'assurer que l'hébergement acceptait les redirections je suis un peu dans le brouillard As-tu une idée ?
benoit* Posté 1 Novembre 2006 Auteur Posté 1 Novembre 2006 Rémi, je publie le contenu du fichier.php car il pourrait permettre de résoudre mon problème <?phpdefine("NOM_COOKIE","biscuit");define("URL_PORTAIL","http://www.portail.com");/* *************************************** */// Ici il faut vérifier que l'utilisateur est loguéif ($_COOKIE[NOM_COOKIE] == ""){ // et sinon (cookie vide) rediriger vers le formulaire. header("Location: " . URL_PORTAIL); die();}// on vérifie que le chemin demandé existe (sinon on est redirigé vers une 404)$chemin = try_filepath($_GET['path']);// Vérifier qu'on n'essaye pas de télécharger le script PHP lui-mêmeif ( ($_GET['path'] == "") || (realpath($chemin) == $_SERVER['SCRIPT_FILENAME']) || (strpos($_GET['path'],"..") !== false) // ni un fichier au dessus || ($_GET['path']{0} == '/') // ni un chemin absolu || ($_GET['path']{0} == '.') // ni un fichier invisible comme .htaccess ){ // Empêche une faille de sécurité header("HTTP/1.0 403 Forbidden"); die("Bien essayé !Nice Try ! essaie encore... :-( one more time ?");}if ($chemin === false){ // Aucun essai de chemin n'a fonctionné, donc on génère une erreur 404 header("HTTP/1.0 404 Not Found"); $page404 = <<<EOF <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML><HEAD> <TITLE>404 Not Found</TITLE> </HEAD><BODY> <H1>Not Found</H1> The requested URL /{$_GET['path']} was not found on this server.<P> </BODY></HTML>EOF; die($page404);}/* ** Si on en arrive là, il ne nous reste plus qu'à afficher la page ** */// envoyer le type MIME du fichier au navigateurheader("Content-Type: " . mime_content_type($chemin)); // puis lui balancer direct le fichier demandéif (getimagesize($chemin) === false) include($chemin); // ce n'est pas une image, essayer d'interpréter la pageelse readfile($chemin); // c'est une image, l'envoyer directement en brut./* *************************************** *//*** Cette fonction essaye les diverses variantes de casse* (majuscules/minuscules) sur le chemin d'accès** _AT_param string $chemin Chemin du fichier à récupérer.* _AT_return string|bool Le chemin avec la casse qui fonctionne* ou false si aucun n'a été trouvé.*/function try_filepath($chemin){ if (file_exists($chemin)) // test tel quel return $chemin; $chemin = strtolower($chemin); if (file_exists($chemin)) // test tout en minuscules return $chemin; // min.min $chemin = strtoupper($chemin); if (file_exists($chemin)) // test tout en majuscules return $chemin; // MAJ.MAJ $dir = dirname($chemin) . "/"; $ext = substr( $chemin , strrpos($chemin,".") ); $base = basename($chemin,$ext); $chemin = $dir.strtolower($base).strtoupper($ext); if (file_exists($chemin)) // test nom en min et extension en MAJ return $chemin; // min.MAJ $chemin = $dir.strtoupper($base).strtolower($ext); if (file_exists($chemin)) // test nom en MAJ et extension en min return $chemin; // MAJ.min // Bon là on n'a tout testé, y'a plus rien à faire. return false;}?>
Remi Posté 2 Novembre 2006 Posté 2 Novembre 2006 Qu'est ce que tu entends par "échec" ? Tu as une erreur 500 ? Ou alors ça ne donne pas le résultat escompté ? Quand on a un pb on faut découper pour le cerner, donc là il faut savoir si ça vient de l'UR ou de ton PHP. Pour cela, fait une simple PHP qui récupère le path et qui l'affiche. Comme cela tu sauras si ton UR est bon ou pas. Ton script ne m'a pas l'air bien sécurisé. Un 'include ($variable)', c'est *le* truc à éviter (ou alors il faut avoir une liste des urls autorisées à être "includées").
benoit* Posté 2 Novembre 2006 Auteur Posté 2 Novembre 2006 Qu'est ce que tu entends par "échec" ?Tu as une erreur 500 ? Ou alors ça ne donne pas le résultat escompté ? Quand on a un pb on faut découper pour le cerner, donc là il faut savoir si ça vient de l'UR ou de ton PHP. Pour cela, fait une simple PHP qui récupère le path et qui l'affiche. Comme cela tu sauras si ton UR est bon ou pas. Ton script ne m'a pas l'air bien sécurisé. Un 'include ($variable)', c'est *le* truc à éviter (ou alors il faut avoir une liste des urls autorisées à être "includées"). Bonjour à tous, bonjour Remi: merci pour ton aide, oui, une erreur 500 Pour cela, fait une simple PHP qui récupère le path et qui l'affiche.Comme cela tu sauras si ton UR est bon ou pas. ? impossible je ne comprend pas ce que tu dis ( niveau 0 en dev )... Ton script ne m'a pas l'air bien sécurisé. En fait, j'utilise un script réalisé par un ancien Webmaster sans comprendre ou modifier celui-ciMais je suis TRES interessé par ce que tu dis et par une alternative éventuelle Cordialement
Remi Posté 2 Novembre 2006 Posté 2 Novembre 2006 Si tu as une erreur 500 c'est probablement que l'UR boucle sur elle-même et dans ce cas c'est la ligne condition qui ne va pas : Essaie avec : RewriteCond %{REQUEST_URI} !fichier\.php$ ou encore RewriteCond %{REQUEST_URI} !^/dossier/fichier\.php Bon et si ton fichier s'appelle index.php, c'est encore une autre chanson... Sinon, sur le script, on le voit qu'il est effectivement ancien. En matière de sécurité, il faut éviter de reprendre des choses trop anciennes car les techniques de contournement évoluent hélas rapidement. Ici, les contrôles opérés sont loin d'être suffisants.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant