3 votes

Comment Apache Limit POST est configuré pour accepter les demandes de services strictement locaux ?

J'essaie de durcir un Apache 2.4 Serveur Web exécutant deux sites Wordpress avec des paramètres de serveur virtuel distincts. Déployé sur Windows 2012 r2. J'ai été piraté il y a quelques semaines et le serveur a été complètement perdu. Sur le nouveau serveur, ils essaient toujours de pirater le site avec des injections de requêtes post et des exécutions de code. J'ai du mal à bloquer tous les POST qui ne sont pas envoyés par le serveur lors de la soumission.

Les choses que j'ai essayées sont

  • <Location> , <Directory> , <Limit> avec leurs attributs comme GET , PUT , POST PUT DELETE en essayant des combos variés avec différents Require déclarations, par exemple. local , ip , host y order allow, deny modèles. Allow all from

  • <Directory "/"> , <Location > , <LimitExcept > Les balises comprenant des attributs tels que GET , POST et des combos.

  • Divers <if > déclarations

  • AllowMethod Déclarations

  • Whitelisting Directories in the .htacess

Placer les tentatives dans un contexte de fichier différent. Par exemple httpd.conf , Vhost.conf , .htaccess . Tous les fichiers que j'ai trouvés référencés dans la documentation d'Apache concernaient le contexte de la directive. Je l'ai même placé là où il ne devrait pas fonctionner, pour rigoler. Rien de ce que j'ai lu dans les documents ou sur stack overflow ne semble fonctionner.

Tous les modules d'authentification sont chargés comme mod_auth, mod_host etc. Supposez juste que les modules sont bons.

Ce que j'aimerais réaliser, c'est deny o <Limit POST> demande. Les autoriser strictement dans une <Directory "/.*"> or ` étant répondu uniquement lorsque le serveur soumet la demande en utilisant l'IP du serveur. Par conséquent, l'IP:port de la requête devrait être l'"adresse distante" car le service local d'apache envoie la méthode de requête via PHP. Je pense que cette logique est correcte.

La dernière chose que j'ai eu le temps d'essayer avant de quitter le travail, est le code ci-dessous qui tente une balise dynamique `<Directory "/.*"> Je ne veux pas fouiller dans Wordpress pour chaque formulaire et créer une balise pour chaque répertoire.

Merci pour votre aide. Veuillez inclure un exemple de code avec votre réponse.

<Directory "/.*">
<if "%{REQUEST_METHOD} == 'POST'">
<Limit POST PUT DELETE>
Require req, http %{REMOTE_ADDR} == 'xx.xx.xx.xx:xx'
</Limit>
</if>
</Directory>

Maintenant, j'ai essayé

<Directory "/"> 
<if "($_SERVER['%{REMOTE_ADDR}'] == 'xx.xx.xx.xx'">
<Limit POST>
allow from all
</Limit>
</if>
</Directory>

<Directory "/"> 
<if "($_SERVER['REMOTE_ADDR'] == 'xx.xx.xx.xx'">
<Limit POST>
allow from all
</Limit>
</if>
</Directory>

Pas de plugin, pas de suggestions pour nginx, E xpress ou IIS. Seulement des solutions pertinentes pour cette configuration.

1voto

Gerard H. Pille Points 2424

Le POST est effectué par le navigateur de l'utilisateur. Si les journaux d'accès d'Apache montrent que la requête provient du même système, il se peut qu'un autre logiciel soit le premier en ligne sur ce système, comme par exemple un webcache tel que Varnish ou HaProxy. Vérifiez si l'en-tête X-Forwarded-For contient l'adresse IP de l'utilisateur. Si vous voulez protéger Wordpress du piratage, ce qui n'est pas facile, vous devez travailler sur Wordpress lui-même. Changez le nom de la page de connexion, donnez à l'administrateur un mot de passe impossible à deviner ou à forcer, et enfin, tenez Wordpress à jour, afin que les vulnérabilités connues soient corrigées.

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