Lorsqu’on utilise Mapserver avec PostGIS, il faut créer dans le mapfile l’objet LAYER sous cette forme:
LAYER NAME "Word" PROJECTION "init=epsg:4326" END STATUS ON METADATA "wms_title" "Le monde" "wms_feature_info_mime_type" "text/html" "wms_include_items" "all" "wms_srs" "epsg:4326" END CONNECTIONTYPE POSTGIS CONNECTION "host=127.0.0.1 dbname=lupis password=toto user=postgres" DATA "the_geom FROM (SELECT id, name, the_geom FROM spatial_reference_unity ) AS QUERY USING srid=4326 USING UNIQUE id" TYPE POLYGON OPACITY 100 CLASS COLOR 255 255 255 OUTLINECOLOR 0 0 0 END END
Il suffit, pour n’importe quel utilisateur, de récupérer l’url du fichier MAP (par exemple http://localhost/france.map) pour récupérer votre mot de passe de la base de données PostGIS (ici pour l’exemple « toto »). Il s’agit d’une faille de sécurité majeure pour votre système d’information.
La solution que j’utilise est l’outil msencrypt fourni par Mapserver (depuis sa version 4.10).
Voici les étapes à suivre pour crypter le mot de passe dans le lien ci-dessus:
- Générer une clé de chiffrement (à noter que cette clé ne doit pas être stockée n’importe où sur votre serveur Web, mais bien dans un répertoire à accès restreint):
msencrypt -keygen « D:\site\restricted_folder\mykey.txt »
Ce fichier de clé généré contient quelque chose comme:
2137FEFDB5611448738D9FBB1DC5905 - Crypter le mot de passe de votre base de données PostGis en utilisant:
msencrypt -key « D:\site\restricted_folder\mykey.txt » « toto »
Ceci retourne le mot de passe crypté qui doit ressembler à cela:
8A1B6A098F1BF956 - Modifier le mapfile pour s’assurer que le ficheier de clé ‘mykey.txt’ peuvent être trouvé:utiliser la variable d’environnement « MS_ENCRYPTION_KEY » . Le paramètre de configuration à l’intérieur de l’objet MAP peut être utilisé pour définir une variable d’environnement:
MAP
…
CONFIG « MS_ENCRYPTION_KEY » « D:/site/restricted_folder/myPostGisKey.txt »
…
FIN # mapfile - Modifier la chaîne connexion de la couche d’utiliser le mot de passe généré clés, en prenant soin d’utiliser les « { } » entre crochet autour de la clé:
CONNECTION « host=127.0.0.1 dbname=lupis password={8A1B6A098F1BF956} user=postgres »
C’est tout !
Référence: http://mapserver.org/utilities/msencrypt.html