La gestion des pages d'erreursIl existe plusieurs manière de renvoyer la raison d'une erreur dans toutes dans cette exemple j'ai choisi un script .php qui va justement prendre en charge la plupart des redirections d'erreurs (tout en un) car il n'y a rien de plus énervant un visiteur que d'arriver sur une page blanche avec les mots "Erreur 404" lorsque l'URL indiquée est incorrecte. Pour y remédier, il suffit de créer sur le site une page d'erreur personnalisée et plus conviviale (page_d_erreur.php dans l'exemple) et on placera les directives suivantes dans le fichier .htaccess # ErrorDocument
ErrorDocument 204 http://mon_site/page_d_erreur.php?error=204 ErrorDocument 401 http://mon_site/page_d_erreur.php?error=401 ErrorDocument 403 http://mon_site/page_d_erreur.php?error=403 ErrorDocument 404 http://mon_site/page_d_erreur.php?error=404 ErrorDocument 408 http://mon_site/page_d_erreur.php?error=408 ErrorDocument 410 http://mon_site/page_d_erreur.php?error=410 ErrorDocument 500 http://mon_site/page_d_erreur.php?error=500 ErrorDocument 502 http://mon_site/page_d_erreur.php?error=502 ErrorDocument 503 http://mon_site/page_d_erreur.php?error=503 ErrorDocument 504 http://mon_site/page_d_erreur.php?error=504 voir le code source de la page personnalisée page_d_erreur.php
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Code |
Message
| Description |
|---|---|---|
| 10x |
Message d'information
| Ces codes ne sont pas utilisés dans la version 1.0 du protocole |
| 20x |
Réussite
| Ces codes indiquent le bon déroulement de la transaction |
| 200 |
OK
|
La requête s'est accomplie correctement |
| 201 |
CREATED
|
Elle suit une commande POST, elle indique la réussite, le corps du reste du document est sensé indiquer l'URL à laquelle le document nouvellement créé devrait se trouver. |
| 202 |
ACCEPTED
|
La requête a été acceptée, mais la procédure qui suit n'a pas été accomplie |
| 203 |
PARTIAL INFORMATION
|
Lorsque ce code est reçu en réponse à une commande GET, cela indique que la réponse n'est pas complète. |
| 204 |
NO RESPONSE
|
Le serveur a reçu la requête mais il n'y a pas d'information à renvoyer |
| 205 |
RESET CONTENT
|
Le serveur indique au navigateur de supprimer le contenu des champs d'un formulaire |
| 206 |
PARTIAL CONTENT
|
Il s'agit d'une réponse à une requête comportant l'en-tête range. Le serveur doit indiquer l'en-tête content-Range |
| 30x |
Redirection
| Ces codes indiquent que la ressource n'est plus à l'emplacement indiqué |
| 301 |
MOVED
|
Les données demandées ont été transférées à une nouvelle adresse |
| 302 |
FOUND
|
Les données demandées sont à une nouvelle URL, mais ont cependant peut-être été déplacées depuis... |
| 303 |
METHOD
|
Cela implique que le client doit essayer une nouvelle adresse, en essayant de préférence une autre méthode que GET |
| 304 |
NOT MODIFIED
|
Si le client a effectué une commande GET conditionnelle (en demandant si le document a été modifié depuis la dernière fois) et que le document n'a pas été modifié il renvoie ce code. |
| 40x |
Erreur due au client
| Ces codes indiquent que la requête est incorrecte |
| 400 |
BAD REQUEST
|
La syntaxe de la requête est mal formulée ou est impossible à satisfaire |
| 401 |
UNAUTHORIZED
|
Le paramètre du message donne les spécifications des formes d'autorisation acceptables. Le client doit reformuler sa requête avec les bonnes données d'autorisation |
| 402 |
PAYMENT REQUIRED
|
Le client doit reformuler sa demande avec les bonnes données de paiement |
| 403 |
FORBIDDEN
|
L'accès à la ressource est tout simplement interdit |
| 404 |
NOT FOUND
|
Classique! Le serveur n'a rien trouvé à l'adresse spécifiée. Parti sans laisser d'adresse... :) |
| 50x |
Erreur due au serveur
| Ces codes indiquent qu'il y a eu une erreur interne du serveur |
| 500 |
INTERNAL ERROR
|
Le serveur a rencontré une condition inattendue qui l'a empêché de donner suite à la demande (comme quoi il leur en arrive des trucs aux serveurs...) |
| 501 |
NOT IMPLEMENTED
|
Le serveur ne supporte pas le service demandé (on ne peut pas tout savoir faire...) |
| 502 |
BAD GATEWAY
|
Le serveur a reçu une réponse invalide de la part du serveur auquel il essayait d'accéder en agissant comme une passerelle ou un proxy |
| 503 |
SERVICE UNAVAILABLE
|
Le serveur ne peut pas vous répondre à l'instant présent, car le trafic est trop dense (toutes les lignes de votre correspondant sont occupées veuillez rappeler ultérieurement) |
| 504 |
GATEWAY TIMEOUT
|
La réponse du serveur a été trop longue vis-à-vis du temps pendant lequel la passerelle était préparée à l'attendre (le temps qui vous était imparti est maintenant écoulé...) |
Activer la base Rewriting
Certains serveurs ne sont pas configurés avec mod_rewrite activé par défaut. Pour vous assurer que mod_rewrite (réécriture de base) est activé sur votre site, ajoutez la ligne suivante à votre fichier htaccess qui se trouve à la racine de votre site :
RewriteEngine on
Activer les liens symboliques
Activer les liens symboliques (symlinks) en ajoutant la directive suivante dans le répertoire cible du fichier htaccess.
Note: Pour la directive FollowSymLinks tout comme AllowOverride; les privilèges doivent être activés dans le fichier de configuration de serveur.
Options +FollowSymLinks
Renommez le fichier htaccess (côté serveur)
La plupart de hébergement gardent l'extention .htaccess par défaut mais sachez qu'il vous est possible de renommer cette extention par celle de votre choix.
Note: Cette directive doit être ajoutée dans le fichier de configuration du serveur sinon elle ne fonctionnera pas :
AccessFileName ht.access
Note: Si vous renommez vos fichiers htaccess, n'oubliez pas de mettre à jour les paramètres de configuration associés.
Par exemple, si vous protégez vos fichiers via htaccess FilesMatch souvenez-vous d'informer le nouveau nom de fichier:
<FilesMatch "^ht\.">
Order deny,allow
Deny from all
</FilesMatch>
Désactiver la Signature du serveur
Ici, nous désactivons la signature numérique qui permet d'identifier le serveur:
ServerSignature Off
Réglez le fuseau horaire du serveur
Nous sommes ici pour instruction au serveur pour synchroniser chronologiquement en fonction du fuseau horaire spécifié de certains pays:
SetEnv TZ Europe/Paris
ou
SetEnv TZ America/Washington
ou bien Londres
SetEnv TZ Europe/London
Empêcher le listage des répertoires
Habituellement, si votre site ne dispose pas d’une page d’index par défaut tous les fichiers de ce répertoire sont accessibles aux visiteurs. Pour éviter cela utilisez le code suivant.
Options All -Indexes
De même, cette règle empêche le serveur de lister le contenu de répertoires:
IndexIgnore *
AddDefaultCharset UTF-8
Limite les requêtes par methode GET et PUT
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|HEAD) RewriteRule .* - [F]
Processus de sélection de fichiers selon la méthode de demande au serveur
Script PUT /cgi-bin/upload.cgi
Script GET /cgi-bin/download.cgi
Exécuter différents types de fichiers par le biais d'un script CGI
Pour des besoins spéciaux où certains types de fichiers doivent être traités avec certains script cgi
Action image/png /cgi-bin/png-script.cgi
Améliorer la vitesse de transfert de site, en permettant la mise en cache des fichiers
Comment améliorer la vitesse de transfert de fichier en permettant la mise en cache.
Utilisation de temps en secondes * pour indiquer la durée de mise en cache du contenu.
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
<FilesMatch ".(js|css|pdf|txt)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>
<FilesMatch ".(html|htm)$">
Header set Cache-Control "max-age=43200"
</FilesMatch>
<FilesMatch "\.(flv|gif|jpg|jpeg|png|ico|js|css|pdf|swf|html|htm|txt)$">
Header set Cache-Control "max-age=5"
</FilesMatch>
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
ExpiresActive On
ExpiresDefault A604800 # 1 week
ExpiresByType image/x-icon A2419200 # 1 month
ExpiresByType application/x-javascript A2419200 # 1 month
ExpiresByType text/css A2419200 # 1 month
ExpiresByType text/html A300 # 5 minutes
# desactive le cache de scripts et fichiers
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
ExpiresActive Off
</FilesMatch>
* Convertir des intervalles de temps en secondes:
300 = 5 minutes
2700 = 45 minutes
3600 = 1 heure
54000 = 15 heures
86400 = 1 jour
518400 = 6 jours
604800 = 1 semaine
1814400 = 3 semaines
2419200 = 1 mois
26611200 = 11 mois
29030400 = 1 an = n'expire jamais
Limiter l'accès au réseau local (LAN)
<Limit GET POST PUT>
order deny,allow
deny from all
allow from 192.168.0.0/33
</Limit>
Déguise les extentions de fichiers
Cette méthode se charge de déguiser tous les types de fichiers (toute extension de fichier) et de les présenter comme des fichiers .php (ou celle de votre choix)
ForceType application/x-httpd-php
Planquer les extensions de script
Pour renforcer la sécurité, de dissimuler les langages de script, en remplaçant l'extensions d'origine par celle de votre choix.
Par exemple, pour changer le .php par l'extension .foo ajouter la ligne suivante à votre fichier htaccess et renommé tous les fichiers en conséquence
AddType application/x-httpd-php .foo
AddType application/x-httpd-cgi .foo
Bloquer les Proxy
RewriteCond %{HTTP:VIA} !^$ [OR]
RewriteCond %{HTTP:FORWARDED} !^$ [OR]
RewriteCond %{HTTP:USERAGENT_VIA} !^$ [OR]
RewriteCond %{HTTP:X_FORWARDED_FOR} !^$ [OR]
RewriteCond %{HTTP:PROXY_CONNECTION} !^$ [OR]
RewriteCond %{HTTP:XPROXY_CONNECTION} !^$ [OR]
RewriteCond %{HTTP:HTTP_PC_REMOTE_ADDR} !^$ [OR]
RewriteCond %{HTTP:HTTP_CLIENT_IP} !^$
RewriteRule ^(.*)$ - [F]
Protection par le couple .htaccess et .htpasswd
Il est parfois nécessaire de protéger l’accès à un répertoire sur un serveur web (ex : répertoire d’administration, contenant des données sensibles) afin d’éviter que n’importe qui puisse y accéder.
Il y a différentes méthodes, ont peut avoir recourt à des langages comme le PHP, ASP, PERL …), mais la méthode la plus simple est d’utiliser le mécanisme de protection d’Apache.
C'est-à-dire effectuer une protection à l’aide des fichiers .htaccess et .htpasswd. On estime ici que l’on n’a pas accès au fichier de configuration http.conf.
AuthUserFile indique au serveur Web où trouver le fichier .htpasswd, qui contient les noms d'utilisateurs et les mots de passe associés.ce fichier devra être mis en CHMOD 444 pour eviter sa lecture.
AuthGroupFile permet de définir un droit d’accès à un groupe d’utilisateur. Cette solution n’est que rarement utilisée pour un site Web. Le reste du temps il pointe vers /dev/null. Il faut que cette ligne soit présente.
AuthName indique le nom de la zone protégée. On peut y mettre ce qu'on veut et sera visible dans la zone de dialogue lors de l'accès.
AuthType Basic est le type d'authentification utilisé. C'est le seul actuellement vraiment utilisé.
Require valid-user accepte tous les utilisateurs qui ont un login : mot de passe dans .htpasswd.
La section Limit permet de donner les directives, comme par exemple "require valid-user" (on pourrait spécifier un ou plusieurs utilisateurs précis avec par exemple require user nom1, nom2). GET et POST sont deux méthodes de la norme HTTP, et là on indique qu'on effectue la restriction sur ces deux méthodes. On peut ne pas mettre de limite, ce qui a pour conséquence d'appliquer les directives à toutes les méthodes.POST est utilisé pour autoriser l’upload de fichiers sous le protocole http.
Ici un générateur de password excellent outils en ligne pour générer vos password.
<Files secure.php>
AuthType Basic
# titre pour la zone de dialogue
AuthName "Prompt"
# repertoire dans lequel se trouve .htpasswd
AuthUserFile /home/path/. htpasswd
Require valid-user
</Files>
<FilesMatch "^(execute|index|secure|insanity|biscuit)*$">
AuthType basic
# titre pour la zone de dialogue
AuthName "Developpement"
# repertoire dans lequel se trouve .htpasswd
AuthUserFile /home/path/. htpasswd
Require valid-user
</FilesMatch>
AuthType basic
# titre pour la zone de dialogue
AuthName "Répertoire protégé"
# repertoire dans lequel se trouve .htpasswd
AuthUserFile /home/path/. htpasswd
AuthGroupFile /dev/null
Require valid-user
Autoriser un ou plusieurs utilisateurs (via l'adresse IP ou nom de domaine) à accéder à un répertoire
En spécifiant l'adresse IP d'une machine, seule cette machine pourra entrer dans la zone protégée sans mot de passe. On peut ajouter autant d'adresse que l'on désire.Avec cette méthode, on peut égalment protéger l'accès à un répertoire à un groupe de machine ou un domaine suivant la précision de l'adresse IP (129.194 ou 129.194.34).
La directive Order s'assure que "allow" supplante "deny" et que ce n'est pas le contraire. Il est toujours bon de préciser les choses. En général "allow from all" est la configuration par défaut des serveurs Web. Ces directives peuvent être restreintes à certaines méthodes HTTP comme GET ou POST (mais il y a aussi PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, et UNLOCK) en utilisant une section débutant par exemple par <Limit GET POST> ...directives... </Limit>.
AuthType Basic
# titre pour la zone de dialogue
AuthName "Répertoire perso"
# repertoire dans lequel se trouve .htpasswd
AuthUserFile /home/path/. htpasswd
Require valid-user
# autorisation pour cet IP
Allow from 82.85.74.68
# autorisation pour ce nom de domaine
Allow from .domaine-a.fr
Satisfy Any
Autoriser un seul domaine à accéder à un ensemble de fichiers
Cet exemple autorise uniquement les gens d'un établissement (.domaine-a.fr) à visionner les fichiers qui débutent par les lettres "visu".
AuthUserFile /home/path/. htpasswd
AuthGroupFile /dev/null
# titre pour la zone de dialogue
AuthName "Zone protégée du cours "
AuthType Basic
# restriction sur tous les fichiers qui commencent par visu
<Files visu*>
Order Allow, Deny
Deny from all
Allow from .domaine-a.fr
</Files>
Autoriser deux domaines ou un utilisateur hors domaines-autorisés à accéder à un répertoire
S'il y a à la fois les directives "allow" et "require" dans un même fichier, le serveur a besoin de savoir si le client est supposé remplir toutes les conditions ou bien une seule. Avec le paramètre "any" (au lieu de "all" par défaut) il faut remplir une seul des conditions.Contrôle par mot de passe: si l'on n'accède pas depuis un des domaines précédents il faut fournir un mot de passe
AuthGroupFile /dev/null
AuthName "Zone protégée du cours "
AuthType Basic
Satisfy any
Order Deny,Allow
Deny from all
#2 domaines autorisés
Allow from .domaine-a.fr
Allow from .domaine-b.com
#L'utilisateur Danakyl est autorisé
Require user Danaky
Voici une excellente méthode pour SSL (Secure Sockets Layer) :
SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "domain.tld"
ErrorDocument 403 https://domain.tld
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Attribuer un CHMOD sur divers types de fichiers automatiquement
Cette méthode va vous permettre de changer les droits sur les fichiers 'CHMOD)de votre choix , emplyez les directives ci dessous soit dans le htaccess root ou dans un htaccess secondaire d'un sous répertoire si placé en root les chmods seront appliqués pour tous repertoires et ses sous répertoires.
chmod . htpasswd files 640
chmod . htaccess files 644
chmod php files 600
Protection contre attaque DOS (denial-of-service) en limitant le poid de fichier en upload
Une méthode pour aider à protéger votre serveur contre les attaques DOS implique de limiter la taille maximale autorisée pour le téléchargement de fichiers. Ici, nous limiterons la taille des fichiers envoyés à 10240000 bytes, ce qui équivaut à environ 10 méga-octets.
Pour cette règle, les tailles de fichiers sont exprimées en octets.
Note: ce code est utile uniquement si vous permettez aux utilisateurs d'uploader des fichiers sur votre site.
LimitRequestBody 10240000
Protection des répertoires en désactivant l'exécution de scripts. voir Contenu dynamique basé sur CGI
Protéger les répertoires de l'exécution de scripts en ajoutant cette règle au fichier htaccess d'un répertoire qui ne comporte pas de script (modifier les types de fichiers en fonction de vos besoins):
En général c'est dans des répertoires ne comportant aucun script que certains scripts malicieux sont insérés lorsque que votre FTP à subit une intrusion (serveur vulnérable)
ExecCGI autorise l'exécution des scripts, si cette option est à -ExecCGI alors le code source du script sera affiché à l'écran.
SymLinksIfOwnerMatch fait la même chose que FollowSymLinks mais suit les liens symboliques créer uniquement par l'utilisateur étant propriétaire des fichiers et répertoires.
AddHandler indique au serveur qu'il doit traiter tous les fichiers possédant les extensions définies en tant que programmes CGI :
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI
Au lieu de le recopier; référencez le c'est plus élégant et c'est la meilleure manière de me remercier ...

Les Expressions Régulières
|
Ci-dessous quelques tutoriels utiles sur les expressions régulières
|
![]() |
Les expressions régulières sur le site du zero Tuto partie 1
Les expressions régulières sur le site du zero Tuto partie 2
Memo pour les REGEX sur le site du zero Memo
Les expressions régulières PCRE (Perl Compatible Regular Expressions) et test des regex
Rédaction en cours ...
|
|||||||||||||||||||||||||||||||||||||||||||||




























































