: Tuto Par :
Le htaccess Part Ouane

Faire un joli HTACCESS, simplement et rapidement un site sous apache

(Valide avec notre ami Wordpress, Hé ouai !)

N.B : je déconseille fortement de copier coller sans lire sinon vous allez tout casser !

Pour beaucoup, faire un site internet c'est limité à ce que que veut bien nous laisser faire notre hébergeur sur leurs serveur mutualisés, et forcé d'avoué que tous les fichiers de configurations d'apache ne peuvent être laissé à porté de main de n'importe quel clampin. La seule solution c'est donc de modifier un fichier un peut spécial, qui à la particularité de ne pas avoir de nom, et comme extension htaccess.

Les dits fichiers sont à placer à coté des fichiers .php ou .html. Ils affectent les fichiers ou dossiers, adjacents et enfants.

Si vous utilisez wordpress de nombreux plugins vous propose de vous l'optimiser, mais franchement c'est pas la peine de mettre ENCORE un plugin pour juste ça, je suis sur que vous en avez déjà pleins. Pas la peine de bourrer encore un peut plus votre CMS, donc pour arranger ça, faut le faire à la main surtout que certaines règles ne peuvent être créer que via vos petites mimines.

Commençons doucement :

Sécurisation

#Pour OVH : SetEnv PHP_VER 5_6

SetEnv REGISTER_GLOBALS 0
SetEnv ZEND_OPTIMIZER 1
Options -Indexes -MultiViews +FollowSymLinks
ServerSignature Off

AddDefaultCharset UTF-8

AddCharset utf-8 .atom .css .js .json .jsonld .rss .vtt .webapp .xml

<files .htaccess>
	order allow,deny
	deny from all
</files>

#Pour Wordpress

<files wp-config.php>
	order allow,deny
	deny from all
</files>

En vrac, vous demandez la dernière version de php, vous activez l'optimisation de php, désactivez les variables globales. Les options désactivent l’indexation des dossiers, la recherche de fichier ''intelligente'' et activez les liens symboliques.

Désactivez la signature du serveur.

Forcez les fichiers à utiliser UTF-8 pour les fichiers renseignés.

Et vous interdisez l’accès au fichier htaccess et wp-config.php.

On passe au gros de la sécurisation

1) Le « MIME-Type sniffing »

Votre navigateur il « sniff » vos fichiers pour savoir ce que c'est, problème il peut être manipuler et faire passer une tentative d'intrusion pour une banale image de lolcat, pour s'en protéger c'est pas compliqué :

Header always set X-Content-Type-Options "nosniff"

2)Le « clickjacking »

En gros des petits malin intègre votre site dans le leurs grâce à la balise <iframe> et vous vole ainsi de la visibilité et des revenu publicitaires, pour s'en prévenir :

<IfModule mod_headers.c>
	Header always set X-FRAME-OPTIONS "DENY"
</IfModule>

3) Faille XSS étape Zune

Le XSS permet d'écrire du code qui sera exécuté dans le navigateur à l’attention du serveur cible, vous vous en doutez le code ainsi « Injecté » est là pour tout cassé/voler des données. Il suffis simplement de forcer cette protection :

<IfModule mod_headers.c>	
	Header always set X-XSS-Protection "1; mode=block"
</IfModule>

N.B : <IfModule mod_headers.c> est une petite sécurité qui vérifié la présence d'un composant dans apache avant d’exécuter le code, ainsi si il est manquant le serveur vous implose pas à la face.

4) Faille XSS étape Deuw:

Plus haut on a bloqué l’exécution du code distant. Mais comment le repérer ?

Attention à vous c'est du lourd là.

<IfModule mod_headers.c>
	Header set Content-Security-Policy: "script-src 'self' https://www.google.com"
</IfModule>

Explication :

Header add Content-Security-Policy :

le nom de la règle que l'on défini en ce moment même

"script-src 'self' https://www.google.com"

là cette réglé stipule que pour le javascript on autorise 

	'self' = Nous même, Aka les fichiers .js stockés sur notre serveur.
Et
	les scripts en provenance de http://google.com 

La rédaction de cette règle doit être faite dans le temps et vous devez faire très attention, il est facile de se retrouver avec une page sans css ni javascript !

Les ressources possibles sont :

  • base-uri : Restraint l'utilisation de la balise <base> .
  • child-src : utilisation des iframes
  • connect-src : pour l’identification serveur
  • font-src : Pour les polices d'écritures
  • form-action Pour les formulaires
  • frame-ancestors Concerne l'utilisation des <frame>, <iframe>, <embed> et <applet>
  • frame-src deprécié, utilisez child-src.
  • img-src défini d'ou les images peuvent être chargés.
  • media-src video et audio.
  • object-src pour le Flash .
  • plugin-types Limitation de la source des différents plugins.
  • report-uri On peut définir une adresse qui recevra des rapport, on en limite l’accès ici.
  • style-src C'est pour les feuilles de styles.
  • upgrade-insecure-requests force les re-écritures du http en https, pas forcément très utilisé.

Pour ces ressources plusieurs valeurs sont possibles avec ces jokers disponibles :

  • 'none',comme son nom l'indique, aucun.
  • 'self' permet le chargement pour l'adresse de votre serveur. Ne concerne pas vos sous-domaines
  • 'unsafe-inline' autorise l'utilisation de javascript directement dans une page.
  • 'unsafe-eval' autorise l'utilise d'eval en javascript.

Petit explication de ma règle, je commence avec :

Header add Content-Security-Policy: 

Première règle, de base j’autorise uniquement moi même :

"default-src 'self';

Ensuite j'autorise le chargement de mes ressources :

script-src 'self' 'unsafe-inline' la-cave-a-nodo.fr *.la-cave-a-nodo.fr; 
connect-src 'self';
img-src 'self' https://symphonie-of-code.fr https://la-cave-a-nodo.fr *.la-cave-a-nodo.fr data: *.gravatar.com;
style-src 'self' 'unsafe-inline' fonts.googleapis.com;
font-src 'self' https://la-cave-a-nodo.fr fonts.gstatic.com;"

Si je vous ai pas totalement noyé vous aurez remarqués que pour les images j'ai un règle. data: Sans rentrer dans les détails en html on peut donner une chaine de caractère dans une <img src='data:SDsdtflsef54drgfhkd46serlkjhsef531' /> et une image apparaît.

au final cela ressemble à ça :

Header add Content-Security-Policy: "default-src 'none';script-src 'self' 'unsafe-inline' la-cave-a-nodo.fr *.la-cave-a-nodo.fr;connect-src 'self';img-src 'self' https://symphonie-of-code.fr https://la-cave-a-nodo.fr *.la-cave-a-nodo.fr data: http: https: *.gravatar.com;style-src 'self' 'unsafe-inline' fonts.googleapis.com;font-src 'self' https://la-cave-a-nodo.fr fonts.gstatic.com;"

Pas très ragoutant hein :p

Aller on fini avec simplicité et beauté :

5)Activation du cache

La mise en cache permet d'expliquer gentiment au serveur qu'il n’a pas besoin de vous envoyer toutes les données qui ne change pas tout le temps à chaque visite.

Petite précision il ce peut que quand vous faites des modifications sur votre site vous (ou vos utilisateur) ne voyez plus immédiatement la contenu, le délai reste quand même assez court.

<IfModule mod_expires.c>
	ExpiresActive On 

	ExpiresDefault "access plus 1 year"

	ExpiresByType image/x-icon "access plus 1 year"

	ExpiresByType image/gif "access plus 1 month"
	ExpiresByType image/svg "access plus 1 month"
	ExpiresByType image/png "access plus 1 month"
	ExpiresByType image/jpg "access plus 1 month"
	ExpiresByType image/jpeg "access plus 1 month"
	ExpiresByType text/css "access 1 month"
	ExpiresByType application/javascript "access plus 1 month"
	ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
	ExpiresByType application/x-font-ttf "access plus 1 year"
	ExpiresByType application/x-font-opentype "access plus 1 year"
	ExpiresByType application/x-font-woff "access plus 1 year"
	ExpiresByType image/svg+xml "access plus 1 year"

</IfModule>

Et ici on active la compression Gzip d'apache, Vous connaissez les archives winzip/rar & co ? Votre navigateur peut recevoir une archive Gzip, qui forcément est plus légère qu'en transfert classique.

<IfModule mod_deflate.c>
	AddOutputFilterByType DEFLATE text/plain
	AddOutputFilterByType DEFLATE text/html
	AddOutputFilterByType DEFLATE text/xml
	AddOutputFilterByType DEFLATE text/css
	AddOutputFilterByType DEFLATE application/xml
	AddOutputFilterByType DEFLATE application/xhtml+xml
	AddOutputFilterByType DEFLATE application/rss+xml
	AddOutputFilterByType DEFLATE application/javascript
	AddOutputFilterByType DEFLATE application/x-javascript
	AddOutputFilterByType DEFLATE application/x-font-ttf application/x-font-opentype image/svg+xml
	AddType image/svg+xml .svg
	AddType x-font/otf .otf
	AddType x-font/ttf .ttf
	AddType x-font/eot .eot
	AddType x-font/woff .woff
	AddType image/x-icon .ico
	AddType image/png .png
	AddOutputFilterByType DEFLATE image/svg+xml
	AddType application/vnd.ms-fontobject .eot
	AddType application/x-font-ttf .ttf
	AddType application/x-font-opentype .otf
	AddType application/x-font-woff .woff
	AddType image/svg+xml .svg

	BrowserMatch ^Mozilla/4 gzip-only-text/html
	BrowserMatch ^Mozilla/4\.0[678] no-gzip
	BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
	BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

	SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
</IfModule>

Ici on indique au navigateur que parfois il luis faut re-télécharger les donnés au cas ou vous les mettez à jours.

<IfModule mod_headers.c>
	<FilesMatch "\\.(jpg|jpeg|png|svg|gif|swf|ogg|ogv|mp4|webm|woff|ttf|odt)$">
		Header set Cache-Control "max-age=2592000, public"
	</FilesMatch>
	<FilesMatch "\\.(ico)$">
		Header set Cache-Control "max-age=604800, public"
	</FilesMatch>
	<FilesMatch "\\. (css|js)$">
		Header set Cache-Control "max-age=31556926, public"
	</FilesMatch>
	<FilesMatch "\\.(|html|json|xml)$">
		Header set Cache-Control "max-age=31556926, public"
	</FilesMatch>	
</IfModule>

Et Voilou ! Vous avez désormais un htaccess pinpé à mort et sécurisé. Le XSS est un gros morceau, et sous wordpress si l'on a pleins d’extensions ça peut vite devenir le dawa inter-nucléaire n'hésitez pas à la laissez tomber si vous vous retrouvez bloqué.

A éditer si j'ai plus de truc ou des correction à faire :D

Dans un prochain article je montrerais comment ce protéger des crawler et autres méchants robots

Avatar de l'utilisateur Nodoka

Nodoka

PedoQueen des intrawebz 2.0, antéchristine de la connerie, j'aime les loli, les vocaloid, l’humour noir (car le blanc est raciste) et les Animés. Promis je te mangerais trollement bien avec amour. Ma devise : "If her age is on the clock, she's old enough for the cock".

Articles Aléatoires

Sélection d'anime du printemps 2016

Sélection d'anime du printemps 2016

Petite sélection personnelle et non exhaustive des animes du printemps 2016 Voir +
Proteger un courriel facilement de méchant robots qui spam

Proteger un courriel facilement de méchant robots qui spam

Exemples de script et techniques de protection de courriel facile à utliser pour se proteger... Voir +
Connecter un ordinateur linux à un NAS Synology au démarrage

Connecter un ordinateur linux à un NAS Synology au démarrage

De manière automatique avec des partages smb/cifs Voir +

Dernieres Quotes DTC

<Moi> Très drôle aujourd'hui au taff !

<Poutix> Raconte

<Moi> Extrait de la conversation :

<Moi> Moi : « Je peux coder le site si tu veux, même si ça m'arrangerait que non »

<Moi> Patron : « Mais non t'as pas besoin, prend un fichier word et fais enregistrer sous, il te propose le format html ! »

<Moi> Moi : « Non mais ça marche pas comme ça, faut d'abord que je code en html, là ça change juste le format »

<Moi> Patron : « Si ça le propose c'est que ça marche, aller essaye »

<Moi> ...

<Moi> Moi : « Tu vois ça marche pas »

<Moi> Patron : « Bah si, ça l’ouvre dans google chrome »

<Moi> Moi : « Oui ça l’ouvre mais y a aucun code derrière »

<Moi> Patron : « Mais pourquoi tu veux du code ? »

<Moi> Moi : « Mais là ça marche juste que c’est du texte, tiens regarde je mets une image »

<Moi> Patron : « T’as fais quoi ? Y a plus rien qui marche ! »

<Moi> Moi : « Je te le dis depuis 1h, faut du code dedans »

<Moi> Intervention de l’autre stagiaire

<Moi> Autre : « En gros là ça change juste ton extension pas le contenu de ton fichier »

<Moi> Patron : « Je comprends rien. Mais bon, t’es parti pour tout coder. »

<Poutix> Du génie

<Ramos> Captain Obvious

#19340 - Voir les commentaires

Neremsa : Je meurs à petit feu.

Elric : De ?

Neremsa : De ce cours qui bouffe mon âme

Elric : ^^

Neremsa : Nan mais il (le prof) a reproduit le phénomène de la bulle temporelle

Neremsa : "ohputain ça fait 15 min qu'il parle"

Neremsa : *consultation de l'heure sur le pc : 5 min sont écoulée depuis le début du cours*

Elric : Ne regarde plus l'heure, à chaque fois que tu y penses le temps retourne au début ^^

Neremsa : Réfléchir aux implications théoriques, quantiques et philosophiques de ta phrase est plus passionnant que mon cours.

#19337 - Voir les commentaires

Mounts : bordel

Mounts : j'ai rêvé que je me créais un mot de passe

Mounts : un truc hyper secure et tout

Mounts : impossible à cracker et facile à retenir

Mounts : J'arrive à me dire dans le rêve "réveille-toi faut absolument le noter"

Mounts : Ce que je fais apparemment

Mounts : je me lève ce matin : m0unts

Mounts : ><

#19341 - Voir les commentaires

Tom : pas de conseils à prendre de cet eunuque ^^'

Pralinette : eunuque?

Sytarie : Un eunuque c'est quelqu'un à qui on a retiré le cou (la nuque plus précisément) chirurgicalement en fait.

Pralinette : ah x3

Pralinette : mais ca fait pas un peu mal?

#19342 - Voir les commentaires