MapSecuring

Filed Under Apache, MapServer

Ini sebenarnya topik lama yang udah aku angkat di milis Mapserver-id tapi supaya menuh-menuhin blog :D , aku tulis lagi di sini. Jadi kasusnya pertama-tama kayak gini: Oya, ada yang merhatiin gak masalah keamanan di sini? Ato bikin-bikin-bikin, yang penting jadi, gitu diancam boleh diobrak-abrik gak, Pan? (nama samaran, red :D ). Setidaknya keamanan data aja. Ini aku kasi tau caranya. Ini berdasarkan yang aku lihat di Mapserver-nya ITB. Bisa diakses di http://petakampus.itb.ac.id/. Katanya sih (ini katanya lho, maklum orang sok tau ngomong), yang buat web itu juga ikutan milis ini dan dianggap jago, sesepuh ato apapun namanya di sini, ato bahkan di dunia mapserver indonesia ya? ayo, siapa yah orangnya, pengen kenalan neh.beneran deh :D Oke, kini langkah2-nya:

  1. Buka website itu, maka akan di-redirect ke
  2. Dari web address bar itu lihat address-nya dan cari yang .map (map=../htdocs/petakampus/itb.map)
  3. Sekarang kita tahu dimana nyimpan .map-nya (map=../htdocs/petakampus/itb.map) yaitu di http://petakampus.itb.ac.id/petakampus/itb.map VOILA!!! kebuka brur.
  4. Sekarang kita tau, “Owhhh… make ms4w juga toh! ITB gitu lohhhh” :D cari bagian SHAPEPATH ./shp/gedung/ (ceritanya kita mo nyuri data neh) ke bagian layer DATA … (misalnya jalan) maka kita dapat ./shp/gedung/jalan(.shp/.shx/.dbf) buka aja misalnya http://petakampus.itb.ac.id/petakampus/shp/gedung/jalan.shp untuk kasus ini sudah di-directive (caranya liat aja httpd_*.conf di ms4w/httpd.d) hingga muncul pesan:
  5. Forbidden

    You don’t have permission to access /petakampus/shp/gedung/jalan.shp on this server.


    Apache/2.0.50 (Win32) Server at petakampus.itb.ac.id> Port 80

    Tapi yang menarik justru yang ini:

  6. Database!!!
    Cari bagian ini:
  7. CONNECTIONTYPE postgis
    CONNECTION "user=**** dbname=******  port=5432
                       host=petakampus.itb.ac.id password=***"
    // (liat sendiri)
    DATA "the_geom from (select gid, zone_id, id_gedung, nm_gedung,
             the_geom from gedung) as foo using unique gid"

VOILA!!! LAGI Hellooooow!!!! it’s your secrecy there! c’mon! walaupun host-nya localhost dan di pg_hba.conf di set hanya dibuka bener2 dari local, tapi kan………


Sekarang solusi yang ditawarkan oleh Pak Iwan Setiawan:

  1. Jangan pernah menayangkan full URL seperti yang ditampilkan pada petakampus itb tersebut:
    Dengan scripting sederhana URL tersebut bisa ditampilkan sebagai: http://petakampus.itb.ac.id/petakampus/frames_dhtml.html
  2. Jangan pernah menyimpan file data dan file .map di direktori yang dapat diakses oleh publik. Cukup simpan di direktori lain yang tidak termasuk dalam wilayah akses web (wwwroot)
  3. Periksa dan tutupi segala lubang keamanan pada server anda.

Salam MapServer! — Iwan Setiawan bima.cakti [@] g****.com


Tanggapan :Simple Solution emang seperti yang dibilang bung (ato Pak nih manggilnya :D;) Iwan Setiawan. Itu juga kalo emang service yang ditawarkan juga simpel. klo udah komersil tetap bahaya. Kenapa?

    <li>Walaupun jauh dari jangkauan www/htdocs apache tapi dengan url dinamis sebagai inputan mapserver, kita tetap masih bisa lihat {<input id=”map” name=”map” value=”/path/map/Anda/peta.map” type=”hidden” />} kan? tinggal masukin ke url juga dengan http://localhost/../../../../../nyampe/root/arahin/ke/path/map/Anda/peta.map juga masih bisa diaksesoleh umum

  1. OS (M$. Winblows) tidak mengenal adanya akses nobody:nogroup ato root:wheel kayak Un*x makanya semua yang ngakses web (untuk nyalain service Apache harus Admin kan?) dianggap administrator!!!
  2. Root Path (/) system !seharusnya! sama dengan root Apache. Misalnya begini: apache diinstal di C:\ms4w\Apache makanya root Apache dibaca pada direktori tersebut sedangkan pada sistem seharusnya pada C:\ (ini ada hubungannya dengan solusi yang aku tawarkan di bawah). Akibatnya beberapa orang mungkin sering menghadapi masalah pada halaman html dengan memasukkan root path sebagai awal.Contoh: {<input type=”hidden” id=”map” name=”map” value=”/path/map/Anda/peta.map”/>} harus Anda masukkan dengan {<input id=”map” name=”map2″ value=”../htdocs/path/map/Anda/peta.map” type=”hidden” />} merujuk pada path cgi-bin Anda.

Lalu solusi yang aku tawarkan bagaimana? Nah, di sini sok tahu aku berperan :p huehehehe… 1. Jangan pernah pakai M$. Winblows. Kalaupun Anda mau maksa dan terlalu malas dan tolol (no offense yak :D;) untuk menggunakan un*x, buat satu user lagi dengan akses terbatas (limited user) lalu jalankan service dengan user tersebut. semuanya pasti pernah nginstall postgresql di winblows kan? caranya sama seperti itu (dulu pernah nemu script .bat-nya tapi udah ilang T_T ). trus tambahin aja user tadi di httpd.conf:

User nobody Group Users
cari atau buat baru di Computer Management -> System Tools -> Local Users and Groups -> Groups (untuk Apache2 katanya sih ini masih banyak masalah, gak tau ntah kata sapa :p;)
Trus setting kepemilikan direktori milik Admin kecuali htdocs atau folder html Anda milik user yang tadi dibuat. oya cgi-bin tempat mapserv.exe dsb juga di-set jadi milik si user tadi.
(Repot? Makanya pakai un*x biar aman :p. Masih tetap gak mau? ya skip aja langkah ini hehe…)

2. Oke, sekarang konfigurasi apache-nya (httpd.conf)
Cari di httpd.conf bagian yang “^\.ht” kira-kira isinya seperti ini:

<FilesMatch "^\.ht" >
	Order allow,deny
	Deny from all
</FilesMatch >

salin-tulis jadinya isinya ada 2, dan ganti satu lagi dengan .map

# ini untuk semua yang berawalan dengan .ht
<FilesMatch "^\.ht" >
	Order allow,deny
	Deny from all
</FilesMatch >
 
# dan ini untuk semua yang berakhiran dengan .map, .shp, .shx, .idx, .dbf
<FilesMatch "\.(map|idx|shx|shp|dbf)" >
	Order allow,deny
	Deny from all
</FilesMatch >

dengan konfigurasi ini juga sebenarnya juga sudah cukup aman. tapi aku ingin lebih. namanya juga manusia, serakah! ;)

3. Sekarang untuk tiap aplikasi kita bikin konfigurasi sendiri seperti pada aplikasi ms4w pada umumnya, namakan aja aplikasinya LontongCorp yang diinstall di C:\ms4w\apps\LontongCorp dengan apache konfigurasi httpd_LontongCorp.conf di
C:\ms4w\httpd.d Aplikasi LontongCorp memiliki dir: htdocs, src dan data; maka isi dari httpd_LontongCorp.conf kita buat seperti ini:

# ini untuk htdocs kita bolehin lihat
Alias /LontongCorp/ "/ms4w/apps/LontongCorp/htdocs/"
<directory "/ms4w/apps/LontongCorp/htdocs/" >
	AllowOverride None Options Indexes FollowSymLinks Multiviews
	Order allow,deny Allow from all
</directory >
 
#Tapi kalau yang ini, gak boleh lihat ya
<directory "/ms4w/apps/LontongCorp/src" >
	Options FollowSymLinks AllowOverride None
	Order deny,allow Deny from all Satisfy all
</directory >
 
<directory "/ms4w/apps/LontongCorp/data" >
	Options FollowSymLinks AllowOverride None
	Order deny,allow Deny from all Satisfy all
</directory >

dan yang agak menggangu sebenarnya pada httpd.conf bagian <Directory />, gak tau merefer ke mana? C:\ atau C:\ms4w\Apache ganti atau salin-tulis dengan

<directory "C:\" >

Kalau hanya directory / seperti gak guna :D

Intinya, pisahkan antara folder data dan halaman htdocs Anda trus dilock. klo memang mau data tetap bisa diakses dan di-download tapi hanya oleh orang2 tertentu, bikin aja .htaccess di folder trus dikasih password. jadi klo orang ngakses lewat http, dia minta password. masalah pada mapserver gak akan terjadi karena mapserver, baik cgi maupun mapscript, ngaksesnya lokal. Oke, cukup segitu aja. Trus udah aman? Belom!!! itu kan masih sekedar yang aku (sok) tahu. Ingat, ada yang bilang: “What made by man, can be destroyed by man too” -> Makanya harus sering doa ke Yang Di Atas kali ya huehehe… ps: ayo, sapa neh yang udah online trus bisa di-test gak kemanan sistemnya. MapTrack mungkin? ato ServMap??? ato Googling aja kali ya? bukan ngetest sistem keseluruhan, soalnya gak bisa sok tau banyak :D Happy MapSecuring!!! :D Nantikan seri2 isu lainnya dariku ya. Yang laennya? sharing dong ^_^ LontongCorp, Enjoy


Dan ini solusi dari hazmi abdun <flying_apache [@] yah**.com>ikutan nimbrung ah (telat bgt yah :p;) emang sih, klo pake mapserver versi cgi itu, query string di urlnya jadi “nge-be-te-in”, soalnya jadi panjang bgt dan apa yang sedang di proses itu jadi transparan alias bisa dibaca orang. tapi ya setidaknya kita harus bisa ngumpetin lokasi file .map-nya, soalnya tentu saja kita gak mau konfigurasi kita terbaca sama orang, seperti kasus ini.klo menurut gw, untuk pengguna windows, bisa ngikutin contoh yang di kasih di situsnya mapserver: ———————————— But anyway, even if it’s valid, the above URL is still ugly. And you might want to use a nicer URL for your WMS Online Resource URL. Here are some suggestions: …2. Another option is to use the “setenvif” feature of Apache: use symbolic links that all point to a same mapserv binary, and then for each symbolic link test the url, and set the MAP environment accordingly.For Windows and Apache users the steps are as follows (this requires Apache 1.3 or newer): * Copy mapserv.exe to a new name for your WMS, such as “mywms.exe”. * In httpd.conf, add:

SetEnvIf Request_URI "/cgi-bin/mywms/"
MS_MAPFILE=/path/to/mymap.map

————————————
note: copy paste dari: http://mapserver.gis.umn.edu/docs/howto/wms_server
Dan untuk ms4w sendiri kan sebenernya dibuat untuk belajar dong, bukan untuk produksi, seperti kata readme-nya MS4W:
————————————
…. Currently, the MS4W installation is considered neither secure nor stable. It should not be used for production purposes.
Do not expect to get any support for using this package in such an environment. ….
————————————
note: copy paste dari README_INSTALL.txt di MS4W sekian tambahannya.. :D
Viva Open Source!

Comments

2 Responses to “MapSecuring”

  1. bootleg on March 29th, 2007 12:32:17 |

    itu udah ga bs dihack yah petakampus.itb.ac.id-nya yah???? :hmmm:

    wah om lontong jago yah… awa masih cupu kk…
    awa masih baru bisa bikin “server ilegal” utk backp film2 aplotan gw di Mods Playground….

    nanti ajarin yah kk :beer:

  2. Eric on March 31st, 2007 02:38:27 |

    udah lama tuh leg
    ah, itu aku lagi belajar supaya jago.
    “server illegal” kan berguna bagi orang banyak .didoain sehat, panjang umur, banyak jodoh huehuehue :lol:

Leave a Reply