5 votes

N'autoriser la méthode POST que pour un fichier spécifique dans un répertoire

J'ai un fichier qui ne doit être accessible que par la méthode POST.

/var/www/folder/index.php

La racine du document est /var/www/ y index.php est imbriqué dans un dossier.

La version d'Apache est : 2.4.4.
Mes configurations sont les suivantes :

<Directory "/var/www/folder">
    <Files "index.php">
        order deny,allow
        Allow from all
        <LimitExcept POST>
            Deny from all
        </LimitExcept>
    </Files>
</Directory>

Je visite mon serveur à 127.0.0.1/folder mais je peux obtenir et envoyer le fichier comme d'habitude.

J'ai aussi essayé d'inverser l'ordre, order allow,deny , require, limitexcept et limit.

Comment faire pour que les requêtes POST ne soient traitées que par un seul fichier dans un dossier ?

6voto

Jack Points 636

Vous pourriez utiliser le Require directive :

<Directory "/var/www/folder">
    <Files "index.php">
        Require method POST
    </Files>
</Directory>

Cependant, comme cela fait partie de la section d'autorisation, vous pouvez essayer ceci à la place :

<Directory "/var/www/folder">
    <Files "index.php">
        <LimitExcept POST>
            Order allow,deny
            Deny from all
        </LimitExcept>
    </Files>
</Directory>

4voto

jowi Points 111

Si vos astuces de configuration d'apache ne fonctionnent pas, vous pouvez le faire dans le fichier index.php lui-même. En haut du fichier, ajoutez quelque chose comme ceci :

<?php
if($_SERVER['REQUEST_METHOD'] != "POST") {
    header("HTTP/1.0 403 Forbidden");
    print("Forbidden");
    exit();
}

1voto

DaveRandom Points 702

El Order , Allow y Deny ont été abandonnées au profit des directives de contrôle d'accès suivantes mod_authz_host .

Cela peut en fait être la raison pour laquelle votre configuration existante ne fonctionne pas, puisque tout conflit Require prendront le pas sur votre configuration (qui est toujours prise en charge par le biais des directives mod_access_compat mais ces directives seront supprimées dans une prochaine version).

Puisque vous utilisez la famille 2.4, vous devriez également utiliser les nouvelles directives de style. J'ai testé la configuration ci-dessous sur 2.4.4 et elle fonctionne comme prévu :

<Directory "/var/www/folder">
    Require all granted
    <Files "index.php">
        <LimitExcept POST>
            Require all denied
        </LimitExcept>
    </Files>
</Directory>

L'observation de Jack selon laquelle vous pourriez utiliser le Require method est également correcte et constitue sans doute une façon plus proche de la 2.4 de procéder.

-1voto

Dr I Points 943

Une condition de réécriture serait en effet plus efficace, mais moins sûre en raison de l'utilisation de Regex qui peut parfois s'avérer délicate.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X