Vous êtes ici : 6.0 > Guide d'installation et d'exploitation > Sécurité

Sécurité, Exploitation serveur

Recommandations de sécurité

La sécurité d'un site Web est le fruit d'une approche globale couvrant l’applicatif et son infrastructure sous-jacente (firewall, architecture et réseaux, système d'exploitation, serveur d'application, SGBD, etc…). Aussi, vous trouverez dans cet article un ensemble de recommandations à mettre en œuvre sur votre infrastructure.

Infrastructure

  • Les pare-feux (firewalls) vous permettent de contrôler les accès à votre réseau, en entrée et en sortie. Il est notamment possible de définir la liste des ports ouverts, à qui sont autorisés ces ports...
  • Vérifiez que les ports qui doivent être ouverts ne le sont que pour les adresses IP nécessaires : le port de MySQL par exemple, ne doit être ouvert que pour le serveur qui l'interroge

Exploitation

  • Gestion des comptes et permissions :
    • N'utilisez pas le compte root pour exécuter vos services (Apache, Tomcat, MySQL)
    • Veillez à ce que les comptes utilisateurs n'aient de permissions que sur les actions et répertoires nécessaires
  • Mise à jour des composants
    • Procédez à une maintenance régulière de vos serveurs, notamment en terme de mises à jour de sécurité sur les composants logiciels suivants : openssh, Apache, K-Portal / K-Sup..., ainsi que sur le système d'exploitation en général
  • Serveurs de recette et pré-production :
    • Vous pouvez mettre en place un filtrage sur IP ou restreindre l'accès à l'aide d'un mot de passe (htaccess) pour l'accès à ces plate-formes
    • N'utilisez pas les mêmes mots de passe pour accéder à ces serveurs que pour accéder au serveur de production
    • Si votre serveur de recette ou de pré-production doit rester accessible sur le web, vous pouvez mettre en place une règle Apache pour éviter que les sites qui s'y trouvent soient indexés par les robots : X-Robots-Tag
  • Lors de livraisons de K-Portal ou K-Sup, veillez à respecter les bonnes pratiques suivantes :
    • Respectez les procédures de livraison fournies par Kosmos
    • Supprimez l'archive de livraison après avoir déployé la mise à jour
    • Ne réalisez aucune sauvegarde de la base de données dans un répertoire accessible par URL
  • Applications de management : les applications de gestion (Tomcat Manager, PHPMyAdmin, Webmin...) ne devraient pas être accessibles sur le web

Apache

  • La version supportée la plus récente est Apache 2.2, il est recommandé de l'utiliser et de procéder régulièrement aux mises à jour fournies.
  • Certaines informations sur la version et les modules installés au niveau d'Apache apparaissent par défaut dans les entêtes HTTP et il est recommandé de les masquer à l'aide des directives ServerSignature et ServerTokens
  • Il est conseillé de désactiver les requêtes utilisant la méthode TRACE
  • Pour éviter l'upload de fichiers volumineux, vous pouvez définir une limite pour la taille de la requête transmise à l'aide de la directive LimitRequestBody
  • Le module mod_security permet de prévenir et détecter les intrusions (pare-feu applicatif)
  • La configuration d'Apache en tant que "reverse proxy" peut également jouer un rôle de filtrage sur certaines requêtes. Nous vous proposons cette fiche technique qui détaille les étapes pour configurer Apache en tant que reverse proxy.

Tomcat

  • La version supportée la plus récente est Tomcat 7, il est recommandé de l'utiliser et de procéder régulièrement aux mises à jour fournies. Bien qu'il ne soit pas officiellement supporté, Tomcat 7 peut être utilisé sur une version 5.0 de K-Portal ou K-Sup.
  • Vous avez désormais la possibilité de désactiver la servlet "invoker" de Tomcat, il vous suffit pour cela de suivre la procédure indiquée dans l'article qui traite ce sujet.
  • Vérifiez que le listing des répertoires est désactivé, dans le fichier conf/web.xml :
  • <init-param>
    <param-name>listings</param-name>
    <param-value>false</param-value>
    </init-param>
  • D'autres recommandations sont proposées sur le site d'OWASP (en anglais)

K-Portal / K-Sup

  • Mots de passe :
    Si vos mots de passe sont enregistrés dans la base de données, nous vous recommandons d'activer des options qui sont détaillées dans un article sur le sujet.
  • HTTPS :
    La mise en place du HTTPS est conseillée pour que vos données sensibles (mots de passe par exemple) ne soient pas transmises en clair sur le réseau.
  • Intranet/extranet en 5.1 :
    Si vous êtes en version 5.1, et que vous avez mis en place un intranet ou un espace dont l'accès est restreint, vérifiez que vos fichiers et médias enregistrés dans cet espace sont bien protégés en suivant le guide de paramétrage du module intranet.
  • Antivirus
    Si vous utilisez un antivirus Web, K-Portal / K-Sup peut être interfacé avec celui-ci afin que tous les fichiers déposés sur le site soient scannés par votre antivirus
  • Gestion des erreurs 500
    En cas d'erreur 500, il est possible de renvoyer l'internaute vers une page d'erreur présentée dans le contexte graphique du site, et à partir de laquelle il peut être orienté vers une autre page ou un formulaire de contact, comme c'est déjà le cas pour les erreurs 404 et 403 (dans la version 5.1).
    Pour mettre en place une page d'erreur 500, recopiez par exemple la page d'erreur 403 (/jsp/error/403.jsp) en 500.jsp, puis déclarez votre page d'erreur dans le fichier web.xml de l'application (ce fichier se situe dans le dossier /WEB-INF/ de l'application) :

  • <error-page>
    <error-code>500</error-code>
    <location>/servlet/com.kportal.core.ErrorServlet?CODE=500</location>
    </error-page>
    Si vous êtes en 5.0, vous pouvez également déclarer une page d'erreur 500, mais vous devrez remplacer la valeur de <location> par /jsp/error/500.jsp

Développement dans les JSP

  • Despécialiser les variables récupérées à partir de la requête HTTP et qui sont ré-utilisées côté client :
    • Si elles sont affichées dans la page et qu'elles ne contiennent que du texte simple, sans code HTML (méthode disponible à partir de la 5.1.4) :
    • com.univ.utils.EscapeString.escapeHtml(request.getParameter("QUERY"));
    • Si elles sont affichées dans la page et qu'elles contiennent du code HTML qui doit être interprété (méthode disponible à partir de la 5.1.4) :
    • com.univ.utils.EscapeString.escapeScriptAndEvent(infoBean.getMessageErreur());
    • Si elles sont insérées dans du Javascript (méthode disponible à partir de la 5.1.4) :
    • <a href="#" onclick="javascript:sauvegarderFiche('<%= com.univ.utils.EscapeString.escapeJavaScript(infoBean.getString("CODE"))%>')">lien</a>
    • Si elles sont insérées dans des attributs de balise HTML (méthode disponible à partir de la 5.1.4) :
    • com.univ.utils.EscapeString.escapeAttributHtml(ctx.getCodeRubriquePageCourante());
    • Si elles sont retransmises dans une URL (méthode disponible à partir de la 5.1.4) :
    • modifRecherche += "&NOM=" + com.univ.utils.EscapeString.escapeURL(parametreEnCours);
  • Effectuer des contrôles sur le format de donnée attendu sur les variables provenant de la requête HTTP, par exemple :
  • if (StringUtils.isNotEmpty(valeurFrom) && StringUtils.isNumeric(valeurFrom)) {
    debutFenetre = (new Integer(valeurFrom)).intValue();
    }

Protégez-vous

  • Il existe des outils comme fail2ban qui permettent de se protéger de comportements anormaux (brut-force par exemple) ou des scanneurs de failles par exemple.