web-dev-qa-db-fra.com

Interdire l'IP déclencheur basé sur la demande du fichier donné?

Je gère un site Web où "x.php" était connu pour avoir des vulnérabilités. La vulnérabilité a été corrigée et je n'ai plus "x.php" sur mon site.

En tant que tel, avec des vulnérabilités publiques majeures, il semble que les gamins des scripts utilisent des outils qui frappent mon site à la recherche de "x.php" dans toute la structure du site - en permanence, 24 h/24 et 7 j/7.

C'est une perte de bande passante, de trafic et de charge dont je n'ai pas vraiment besoin.

Existe-t-il un moyen d'interdire temporairement (ou définitivement) une adresse IP essayant d'accéder à "x.php" n'importe où sur mon site?

Peut-être ai-je besoin d'une page personnalisée 404 PHP qui capture le fait que la requête concerne "x.php" et déclenche ensuite l'interdiction? Comment puis je faire ça?

Merci!

EDIT:

Je devrais ajouter cette partie de durcissement de mon site, j'ai commencé à utiliser ZBBlock :

Ce script de sécurité php est conçu pour détecter certains comportements préjudiciables aux sites Web ou aux mauvaises adresses connues qui tentent d'accéder à votre site. Il enverra ensuite au mauvais robot (ou généralement) ou au pirate une page 403 INTERDITE authentique avec une description du problème. Si l'attaquant persiste, il recevra un message récurrent 503 OVERLOAD avec un délai d'expiration de 24 heures.

Mais ZBBlock ne fait pas exactement ce que je veux faire, il aide à bloquer les autres spams/scripts/hack.

5
Mike Atlas

Recréez x.php et faites-le collecter l'adresse IP de quiconque tente de l'atteindre. Créez ensuite (ou modifiez) un fichier .htaccess qui les bloque à l’aide d’Apache. Le fichier .htaccess ressemblera à ceci:

order deny,allow
deny from 123.123.123.123
deny from 255.255.255.255

Continuez simplement à ajouter à ce fichier toute adresse IP que vous souhaitez bannir.

Le x.php pourrait ressembler à ceci: (non testé)

<?php
    $fp = fopen('.htaccess', 'a');
    fwrite($fp, 'deny from  ' . $_SERVER['REMOTE_ADDR'] . "\n");
    fclose($fp);
?>
3
John Conde

Le code PHP que John Conde a publié ne fonctionne pas. Il remplace l'intégralité du fichier .htaccess comme résultat indésirable. Le PHP ci-dessous pourrait remplacer son PHP et je l’ai testé.

<?php      
    $ipdeny = 'deny from  ' . $_SERVER['REMOTE_ADDR'];
    file_put_contents('.htaccess', $ipdeny . PHP_EOL, FILE_APPEND);
?>
2
Jonathan Rowley