Problème avec un .htaccess

Problème avec un .htaccess - HTML/CSS - Programmation

Marsh Posté le 17-08-2008 à 23:33:52    

Bonsoir à tous!
 
Je cherche à protéger l'accès à un dossier contenant des téléchargements.
Je ne veux pas passer par une authentification mais par (si c'est possible) la provenance des utilisateurs.
Je m'explique : j'aimerais interdire l'accès direct au fichier de type www.monsite/downloads/fichier.doc et obliger l"utilisateur a passer par la section de téléchargement du site de type www.monsite/downloads.php
 
J'ai alors créé un fichier .htaccess que voici
 

Code :
  1. Order Deny,Allow
  2. Deny from all
  3. Allow from IP du site


 
Mais ça ne marche pas...  
 
Je me suis basé sur un code qui utilisé le fichier .htaccess suivant :
 

Code :
  1. Order Deny,Allow
  2. Deny from all
  3. Allow from localhost 127.0.0.1


 
qui ne marchait pas non plus...
 
Donc voila si vous pouviez m'aiguiller ça serait très sympa!
 
Merci par avance!
 

Reply

Marsh Posté le 17-08-2008 à 23:33:52   

Reply

Marsh Posté le 17-08-2008 à 23:45:12    

Tu mets çà dans ton dossier downloads :

Code :
  1. order deny, allow
  2. deny from all

Reply

Marsh Posté le 18-08-2008 à 10:07:16    

Bonjour,
J'ai suivi votre conseil et ça ne marche toujours pas (error 403)
Ce qui me semble en fin de compte assez logique étant donné que aucune ligne allow n'est renseignée...
Auriez vous une autre idée?
Merci encore!

Reply

Marsh Posté le 18-08-2008 à 12:52:37    

bah y'a pas besoin de "allow" puisque tu veux que personne n'y accède. Donc çà marche !
en tapant  
www.monsite/downloads/fichier.doc : erreur 403 !
en tapant :
www.monsite/download.php?file=fichier.doc : çà marche !
(PHP peut accéder aux fichiers malgré la restriction htacess)

Reply

Marsh Posté le 18-08-2008 à 15:52:14    

Et bien non car la page PHP va chercher les fichiers dans un dossier qui est protégé par ce .htaccess ...

Reply

Marsh Posté le 18-08-2008 à 16:23:52    

fade2black a écrit :

Et bien non car la page PHP va chercher les fichiers dans un dossier qui est protégé par ce .htaccess ...


non, fait au moins un test :
place un fichier php en dehors de ton dossier downloads avec ce code :
 

Code :
  1. <?php
  2. header('Content-Type: application/ms-word');
  3. readfile('downloads/fichier.doc');
  4. ?>

Reply

Marsh Posté le 18-08-2008 à 22:01:01    

Bonsoir,  
 
Tout d'abord merci de votre aide!
J'ai créé le fichier en question mais quand je cherche à le lancer, mon naviguateur cherche à la télécharger !! Le PHP pas le fichier cible... Savez vous d'ou ça peut venir?
Merci !

Reply

Marsh Posté le 18-08-2008 à 22:42:36    

tu as bien mis la bonne url de ton fichier ? rajoutes çà :
header("Content-Disposition: attachment; filename=fichier.doc" );

Reply

Marsh Posté le 19-08-2008 à 00:21:38    

Tu as effectivement raison! Merci encore.
Je vais essayer de revoir mon fichier downloads.php pour trouver l'origine et je te tiens au courant!
 
Voici le passage concernant le téléchargement :  
 
Je n'arrive pas à trouver ce qui fait que je retombe toujours sur une erreur 403...
 

Code :
  1. /*
  2.  * not it is time and we are ready to rumble: send the file to the user client to download it there!
  3.  */
  4.  if ($dl_file['extern'])
  5.  {
  6.   header("HTTP/1.1 301 Moved Permanently" );
  7.   header("Location: ".$dl_file['file_name']);
  8.  }
  9.  else if ($status)
  10.  {
  11.    $dl_file_url = $dl_config['dl_path'] . $index[$cat_id]['cat_path'] . $dl_file['file_name'];
  12.   $dl_file_size = sprintf("%u", @filesize($dl_file_url));
  13.   $mem_limit = ini_get('memory_limit');
  14.   $last = strlen($mem_limit) - 1;
  15.   $max_mem_limit = (int)$mem_limit;
  16.   switch($mem_limit{$last})
  17.   {
  18.    case 'G':
  19.     $max_mem_limit *= 1024;
  20.    case 'M':
  21.     $max_mem_limit *= 1024;
  22.    case 'K':
  23.     $max_mem_limit *= 1024;
  24.   }
  25.   if ($dl_file_size > $max_mem_limit || $dl_config['dl_method'] == 3)
  26.   {
  27.    $board_url = generate_board_url();
  28.    if ($board_url{strlen($board_url)-1} <> '/')
  29.    {
  30.     $board_url .= '/';
  31.    }
  32.    $dl_file_url = $board_url . $dl_config['download_dir'] . $index[$cat_id]['cat_path'] . $dl_file['file_name'];
  33.    $dl_file_url = str_replace(" ", "%20", $dl_file_url);
  34.    header("HTTP/1.1 301 Moved Permanently" );
  35.    header("Location: " . $dl_file_url);
  36.   }
  37.   else
  38.   {
  39.    if ($dl_config['dl_method'] == 1)
  40.    {
  41.     header("Content-Type: application/octet-stream" );
  42.     header("Content-Disposition: attachment; filename=\"".$dl_file['file_name']."\"" );
  43.     readfile($dl_file_url);
  44.    }
  45.    else if ($dl_config['dl_method'] == 2)
  46.    {
  47.     $size = sprintf("%u", @filesize($dl_file_url));
  48.     header("Cache-Control: must-revalidate, post-check=0, pre-check=0" );
  49.     header("Content-Type: application/octet-stream" );
  50.     header("Content-Length: ".$size);
  51.     header("Content-Transfer-Encoding: binary" );
  52.     header("Content-Disposition: attachment; filename=\"".$dl_file['file_name']."\"" );
  53.     if ($size > $dl_config['dl_method_quota'])
  54.     {
  55.      $dl_mod->readfile_chunked($dl_file_url);
  56.     }
  57.     else
  58.     {
  59.      readfile($dl_file_url);
  60.     }
  61.    }
  62.   }
  63.  }
  64.  else
  65.  {
  66.   trigger_error('DL_NO_ACCESS');
  67.  }
  68. }
  69. else
  70. {
  71.  trigger_error('DL_NO_ACCESS');
  72. }
  73. exit;
  74. }
  75. else if ($view == 'comment')
  76. {


Message édité par fade2black le 19-08-2008 à 00:38:39
Reply

Marsh Posté le 20-08-2008 à 16:25:43    

fade2black a écrit :

Bonsoir,

 

Tout d'abord merci de votre aide!
J'ai créé le fichier en question mais quand je cherche à le lancer, mon naviguateur cherche à la télécharger !! Le PHP pas le fichier cible... Savez vous d'ou ça peut venir?
Merci !

 

C'est normal que ton navigateur cherche à télécharger un fichier puisque tu as le header "Content-Type: application/ms-word". Ton navigateur croit donc à un fichier Word et le télécharge.
C'est le comportement que tu recherches non ?
Ton script php lit le vrai fichier word dans ton dossier protégé puis se "fait passer" pour un fichier word (via le header) et renvoie ce qu'il a lu.
Je pense que ton problème est résolu ou alors il y a un truc qui m'échappe.

 


Message édité par basile238 le 20-08-2008 à 16:26:19
Reply

Marsh Posté le 20-08-2008 à 16:25:43   

Reply

Marsh Posté le 21-08-2008 à 13:57:52    

Merci pour ces explications, je dois vous avouer que je n'ai pas tout compris... Le problème reste pourtant le même et je me retrouve avec une erreur 403 quand je cherche à télécharger le fichier.
je cherche effectivement que le script php télécharge le fichier mais éviter qu'on puisse directement dans le dossier chercher le fichier. C'est pour ça que j'ai mis un .htaccess dans ce dossier avec tout simplement "Deny from all" et je comprends pas pourquoi mon fichier php ne passe pas au delà de ce .htaccess. Ca devrait être le cas non?
Bonne journée à vous!

Reply

Marsh Posté le 21-08-2008 à 17:04:17    

Essaie ça:

 
Code :
  1. <?php
  2. header('Content-Type: application/ms-word');
  3. echo file_get_contents('downloads/fichier.doc');
  4. ?>
 

Attention: la ligne header('Content-Type: application/ms-word'); doit apparaître avant toute chose. Fait gaffe de ne rien mettre avant (notamment pas d'espace avant le tag <?php)

 

Vérifie aussi que les permissions en lecture (chmod) sont mises à la fois pour le dossier downloads et pour fichier.doc, sans quoi ton script ne pourra pas lire le fichier.


Message édité par basile238 le 21-08-2008 à 17:08:08
Reply

Marsh Posté le 04-09-2008 à 21:25:48    

Bonjour,  
 
J'ai moi aussi un problème de .htaccess !
 
Je ne protège qu'un seul dossier. Sous firefox, pas de problème, sous IE, j'ai un prompt dès l'ouverture du site ...
 
Mon fichier htaccess :
 

Code :
  1. AuthName "Page d'administration protégée"
  2. AuthType Basic
  3. AuthUserFile "/lecheminabsoludemonfolder/.htpasswd"
  4. Require valid-user


 
mon .htpasswd : juste une ligne login:passwd
 
 


---------------
Blood is rushing into your muscles and that's what we call The Pump. Your muscles get a really tight feeling, like your skin is going to explode any minute ...
Reply

Marsh Posté le 07-09-2008 à 10:23:15    

Personne ,  :sweat:


---------------
Blood is rushing into your muscles and that's what we call The Pump. Your muscles get a really tight feeling, like your skin is going to explode any minute ...
Reply

Marsh Posté le 07-09-2008 à 10:44:46    

c'est quoi ton problème ? tu voudrais pas de prompt à l'accès de ton dossier ?

Reply

Marsh Posté le 08-09-2008 à 08:07:54    

En fait, je veux un prompt juste pour l'accès au folder d'admin. Sous FF, ça fonctionne. Sous IE, j'ai un prompt dès la page d'index du site (lien dans ma signature)  :??:


---------------
Blood is rushing into your muscles and that's what we call The Pump. Your muscles get a really tight feeling, like your skin is going to explode any minute ...
Reply

Marsh Posté le 08-09-2008 à 18:34:51    

réfléchis un peu, c'est normal...
Tu n'as pas bien compris le rôle du htaccess et la relation client-serveur.
HTACCESS s'applique aux requêtes du client. Si l'accès à l'image est fait depuis le client (via requête HTTP), le HTACCESS va demander une autorisation d'accès. Si c'est depuis le serveur (via PHP par exemple), l'accès sera autorisé.
Il faut que tu passes par une page PHP qui affiche dynamiquement l'image (avec readfile()) et qui soit ciblée par l'attribut src de ton tag img (dans ta page d'accueil).
 
NOTE : chez moi, (FF), le prompt s'affiche en plus. Et c'est normal.
 
Ca donne :
 
image.php

Code :
  1. <?php
  2. $img  = $_GET['img'];
  3. $size = getimagesize($img);
  4. if($size[0] && $size[1]) {
  5.     $mime = $size['mime'];
  6.     header("Content-Type: $mime" );
  7.     readfile($img);
  8. } else {
  9.     header("HTTP/1.0 404 Not Found" );
  10. }
  11. ?>


 
index.html
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Titre</title>
  6. </head>
  7.  
  8. <body>
  9. Image :
  10. <img src="image.php?img=dossier/image.jpg" />
  11. </body>
  12. </html>


Message édité par Profil supprimé le 08-09-2008 à 18:46:45
Reply

Marsh Posté le 08-09-2008 à 20:45:35    

OK...
 
Finalement, j'ai la même erreur sous FF. Je suppose que j'avais un cookie d'authentification quelque part. Aujourd'hui, en purgeant tout, j'ai aussi un prompt.
 
Effectivement, il me manque de grosses notions. Mais j'ai du mal à trouver de l'info claire et pas trop "dense" ...
 
Je viens de lire pas mal de choses mais j'ai un souci. Comment empêcher l'accès aux répertoires de mon site si tout est en html ?


---------------
Blood is rushing into your muscles and that's what we call The Pump. Your muscles get a really tight feeling, like your skin is going to explode any minute ...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed