Pour afficher la configuration PHP, utiliser la fonction phpinfo() (cf. http://php.net/manual/fr/function.phpinfo.php)
La configuration PHP en ligne de commande (CLI) est différente (limites inexistantes, sécurités plus faibles, etc.)
Zend OPCache est activé par défaut sur tous les serveurs PHP. Pour afficher la configuration pour un projet, utiliser la fonction phpinfo() (cf. http://php.net/manual/fr/function.phpinfo.php)
Dans le cas d’une plateforme avec serveurs redondants, vérifier que le trafic HTTP et/ou HTTPS soit redirigé vers le bon serveur (cf. documentation plateforme concernée : cookie SERVERID) avant de regarder les logs.
Les logs sont situés dans /home/logs/...
gzip -d /home/log/php/xxxxxxx.gzLes connections SSL sont prises en charge par les proxies en entrée des plateformes comme ceci :
De ce fait, le serveur web et les applications ne savent pas que le flux doit être en HTTPS
Pour indiquer à l’application qu’il s’agit d’un flux HTTPS, il faut utiliser le header X-FORWARDED-PROTO (header standard ajouté par le proxy).
[HTTP_X_FORWARDED_PROTO] => https
Documentations de références :
Exemple pour Symfony app/config/config.yml
trusted_proxies: [<ip_publique_proxy1>, <ip_publique_proxy2>, <...>]
Les IP publiques sont disponibles sur la documentation de la plateforme concernée.
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Pour afficher la liste des protocoles et ciphers disponibles, utiliser la commande nmap --script ssl-enum-ciphers -p 443 <hostname>, par exemple :
$ nmap --script ssl-enum-ciphers -p 443 free.fr
Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-23 17:09 CET
Nmap scan report for free.fr (212.27.48.10)
Host is up (0.045s latency).
Other addresses for free.fr (not scanned): 2a01:e0c:1::1
rDNS record for 212.27.48.10: www.free.fr
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 4096) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 4096) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 4096) - A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 4096) - A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
| compressors:
| NULL
| cipher preference: server
| TLSv1.1:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 4096) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 4096) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 4096) - A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 4096) - A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
| compressors:
| NULL
| cipher preference: server
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 4096) - A
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 4096) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (dh 4096) - A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 4096) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (dh 4096) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 4096) - A
| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 4096) - A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 4096) - A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
| compressors:
| NULL
| cipher preference: server
|_ least strength: APour connaitre l’adresse IP réelle des visiteurs sur une application PHP, la plupart du temps on utilise le header REMOTE_ADDR.
Ce header contient l’adresse IP du dernier client avant le serveur web donc s’il y’a un proxy entre le visiteur et le serveur web cela va retourner l’adresse IP du proxy. Pour connaitre la véritable adresse IP du visiteur, il y’a toutefois deux solutions :
Documentation Symfony liée : http://symfony.com/doc/current/introduction/http_fundamentals.html#requests-and-responses-in-symfony