: 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 de l'hiver 2015/16

Sélection d'anime de l'hiver 2015/16

Petite sélection personnelle et non exaustive des animes de l'hiver 2015/16 et du visionnage... Voir +
Integration de Gravatar dans un project symfony 2

Integration de Gravatar dans un project symfony 2

Tutorial pour Integrer facilement gravatar dans une project symfony 2 Voir +
Bla bla Mangesque : GATE Au-delà de la porte

Bla bla Mangesque : GATE Au-delà de la porte

Petite critique (mauvaise fois inside ?) du manga GATE : JSDF L'animé c'est de la merde Voir +

Dernieres Quotes DTC

(Par LicorneBadass)

À défaut d'avoir la côte auprès de sa patronne, il l'a maintenant sur DTC.

Hitsuke : Comme d'hab, je glandais au taf, sur DTC , j'avais la tête dans le cul, j'avais pas pris mon café (bon en vrai je prend du Nesquick, mais dire que je prend du café, ça fait un peu plus viril)

Hitsuke : Ma patronne se ramène, me demande si je peux lui sortir des quotes

Hitsuke : Là je suis sur le cul, de 1 je me demande comment elle m'a grillé en train de glander, de 2, comment elle connait DTC

Tom : J'avoue ouais

Hitsuke : Du coup, je cherches pas à comprendre, je lui imprime les dernières quotes et je lui file ...

Hitsuke : Elle se tire, et reviens 1h plus tard, me demandant qu'est ce que c'était que je lui avait filé, j'ai pris une charge o/

Tom : Bah pourquoi ??

Hitsuke : Elle avait rendez-vous avec un client, elle voulait les côtes d'un produit ...

Tom : xD

Tom : GROS BOULET

Hitsuke : Bon cela dit, j'aurais quand même voulu voir sa gueule quand le client lui à demander les côtes et qu'elle a sortit ma page de quotes

Hitsuke : Parlons sérieusement sinon ....

Tom : C'est possible avec toi ?

Hitsuke : Comment on s'inscrit à Pole Emploi ? (A titre d'info, c'est pour un ami)

#19750 - Voir les commentaires

(A propos de)

Hitsuke : Comme d'hab, je glandais au taf, sur DTC , j'avais la tête dans le cul, j'avais pas pris mon café (bon en vrai je prend du Nesquick, mais dire que je prend du café, ça fait un peu plus viril)

Hitsuke : Ma patronne se ramène, me demande si je peux lui sortir des quotes

Hitsuke : Là je suis sur le cul, de 1 je me demande comment elle m'a grillé en train de glander, de 2, comment elle connait DTC

Tom : J'avoue ouais

Hitsuke : Du coup, je cherches pas à comprendre, je lui imprime les dernières quotes et je lui file ...

Hitsuke : Elle se tire, et reviens 1h plus tard, me demandant qu'est ce que c'était que je lui avait filé, j'ai pris une charge o/

Tom : Bah pourquoi ??

Hitsuke : Elle avait rendez-vous avec un client, elle voulait les côtes d'un produit ...

Tom : xD

Tom : GROS BOULET

Hitsuke : Bon cela dit, j'aurais quand même voulu voir sa gueule quand le client lui à demander les côtes et qu'elle a sortit ma page de quotes

Hitsuke : Parlons sérieusement sinon ....

Tom : C'est possible avec toi ?

Hitsuke : Comment on s'inscrit à Pole Emploi ? (A titre d'info, c'est pour un ami)

#19750 - Voir les commentaires

(Par Edwon_25)

🎶 Supercalifragilisticexpialidocious... 🎶