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