Mengabaikan direktori .svn di bawah IIS

8

Kami adalah organisasi pengembangan web dan baru-baru ini pindah ke menggunakan subversi untuk sistem kontrol versi kami. Karena mengeksekusi pembaruan jauh lebih cepat daripada melakukan ekspor dan menyalin file, pengembang ingin agar server produksi menjadi copy yang berfungsi.

Satu-satunya masalah yang saya miliki dengan ini adalah semua file .svn yang berserakan di seluruh sistem, dan fakta bahwa beberapa orang yang perusahan dapat, berpotensi, membaca isi file di sana, mungkin memberi mereka informasi yang kami inginkan mereka lebih suka mereka tidak memiliki .

Apa cara terbaik / termudah untuk mencegah IIS menyajikan konten apa pun dari dalam direktori .svn itu?

cdeszaq
sumber
1
Halo. Bisakah Anda mengklarifikasi jenis informasi apa yang ingin Anda miliki di .svn yang belum tersedia di file yang digunakan?
Geo
Apa versi IIS? Jika IIS7 Anda bisa mendapatkan Modul Penulisan Ulang URL dan hanya menyiapkan aturan sederhana untuk mengabaikan direktori .svn.
MattB
1
@ Geo - direktori .svn berisi salinan teks-biasa dari file-file di basis teks. Karena file bernama sama di sana, hanya dengan .svn-base ditambahkan, orang dapat melihat kode dalam teks biasa (ini adalah situs ASP klasik). Kami lebih suka itu tidak terjadi.
cdeszaq
@ MatB - Server adalah IIS6 sekarang, tetapi akhirnya beralih ke IIS7. Jadi, saya akan melihat modul penulisan ulang setelah switch, tapi sayangnya, servernya adalah IIS6 sekarang.
cdeszaq

Jawaban:

8

"Jangan lakukan itu" tidak menjawab pertanyaan.

Praktis, saya suka memiliki copy pekerjaan di server produksi, karena dengan cara itu saya dapat membuat perubahan cepat dalam produksi (siapa yang belum pernah melakukan itu?) Dan memeriksanya kembali. Itu tergantung di mana Anda ingin slider keamanan / kenyamanan Anda, dan dalam banyak kasus ini adalah tempat yang bagus.

Solusi standar di Apacheland adalah meninggalkan file .svn di sana tetapi memberi tahu server web untuk tidak pernah melayani mereka. Berikut ini cara melakukannya dengan IIS 5-7 di Windows 2000-2008.

  1. Unduh dan pasang ISAPI_Rewrite - versi Lite akan cukup untuk tujuan ini. Perhatikan persyaratan sistem tambahan untuk Win 2008. Peringatan - penginstal MSI berhenti dan memulai IIS.

  2. Hapus centang pada kotak "read only" pada properti file httpd.ini . Jika Anda menggunakan penginstal MSI, ada pintasan ke file httpd.ini di menu Start di bawah Helicon-> ISAPI_Rewrite

  3. Tambahkan baris ini ke httpd.ini :

Arahan ISAPI_Rewrite di httpd.ini :

# Deny access to Subversion working copy administrative
#  directories (.svn) and their contents
RewriteRule .*/\.svn\b.* . [F,I,O]

Sekarang, setiap permintaan untuk direktori .svn atau isinya akan menghasilkan 404 Tidak Ditemukan dari server.

Nathan
sumber
Saya tidak melihat bahwa saya menginstal versi yang lebih lama, ISAPI_Rewrite2. Versi yang lebih baru, ISAPI_Rewrite3, termasuk aplikasi yang disebut "ISAPI_Rewrite Manager" yang membuatnya sedikit lebih mudah untuk mengedit file, dan pada Windows 2008 Server tampaknya tidak memerlukan restart IIS. Juga, saya telah memposting ini dengan beberapa detail lagi di blog saya: n8v.enteuxis.org/2009/11/…
Nathan
"Jangan lakukan itu" tidak menjawab pertanyaan. - stackoverflow singkatnya. Terima kasih telah menjawab pertanyaan secara langsung.
John Hargrove
5

Anda dapat memastikan bahwa akun pengguna apa pun yang digunakan oleh IIS tidak memiliki hak untuk mengakses direktori .svn.

Anda dapat melakukan ini secara manual (tidak disarankan) atau menggunakan sesuatu seperti skrip penghapusan MrJangles yang dipicu untuk dijalankan setelah Anda melakukan pembaruan SVN atau menjalankan secara teratur sebagai tugas terjadwal:

for /r YOURPATH %f in (.svn) do icacls /deny <name_of_iis_user>:F "%f"

(catatan: Saya belum menguji yang di atas, Anda harus memeriksa apakah melakukan apa yang dicoba sebelum mengandalkannya dalam produksi, lihat output "icacls / help" untuk info lebih lanjut)

(catatan lain: "icacls" adalah perintah Vista / 2008, pada varian Windows sebelumnya perintahnya adalah "cacls" sebagai gantinya)

David Spillett
sumber
Itu jenius murni!
Richard Slater
5

Menggunakan IIS 7, buka IIS Manager, pilih node server, klik dua kali fitur Handler Mappings . Klik tindakan Tambahkan Managed Handler dan konfigurasikan handler sebagai berikut:

  • Jalur permintaan: * .svn / * (pemetaan wildcard untuk semua file di semua folder .svn)
  • Ketik: System.Web.HttpForbiddenHandler
  • Nama: Subversion-metadata (Anda dapat memilih nama yang berbeda jika diinginkan)

Sekarang setiap permintaan untuk file dalam folder metadata Subversi bernama .svn di situs alle harus mengembalikan ini:

Kesalahan Server dalam Aplikasi '/'.

Jenis halaman ini tidak ditayangkan.

Deskripsi: Jenis halaman yang Anda minta tidak ditayangkan karena telah dilarang secara eksplisit. Harap tinjau URL di bawah ini dan pastikan bahwa itu dieja dengan benar.

URL yang diminta: /.svn/text-base/Default.aspx.svn-base

Anda dapat memilih jenis penangan yang berbeda jika diinginkan, mungkin penangan FileNotFound yang akan mengembalikan kode status 404.

Untuk IIS 6 (dengan ASP.NET 2 diinstal dan dikonfigurasi):

Buka direktori Home> Konfigurasi> Pemetaan dan petakan .svn-baseekstensi ke %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll. Kemudian di machine.config (yang dapat Anda temukan di %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG) Anda dapat menambahkan handler yang sama seperti di atas untuk ekstensi, tambahkan elemen XML berikut sebagai anak- <httpHandlers>elemen:

<add verb="*" path="*.svn-base" type="System.Web.HttpForbiddenHandler"/>

Ini hanya akan mencegah pengunjung dari meminta file kode sumber, mereka masih bisa meminta file lain dari folder .svn. Petakan lebih banyak ekstensi ke aspnet_isapi.dll atau buat pemetaan wildcard (akan memengaruhi kinerja) dan Anda dapat memblokir lebih banyak file dari yang diminta.

Michiel van Oosterhout
sumber
4

Dari sudut pandang keamanan murni, saya akan mendidik kembali pengembang Anda.

Kemudahan penempatan belum tentu merupakan ide bagus jika Anda mengorbankan keamanan.

Anda sedang merencanakan konfigurasi untuk memblokir akses ke informasi sensitif. Apa yang terjadi jika konfigurasi tidak sengaja berubah. Apa yang terjadi jika IIS hotFix turun dan mengubah cara kerja konfigurasi Anda. Apa yang terjadi jika pustaka pihak ke-3 yang Anda gunakan kesalahan dan berhenti berfungsi. Saya dapat memikirkan beberapa peristiwa yang sangat mungkin yang akan merusak konfigurasi Anda dan memungkinkan akses ke file-file ini, yang akan BENAR - BENAR MITIGASI dengan tidak memiliki file di server di tempat pertama.

Anda harus membuat skrip penerapan yang menyalin file yang sesuai dari server pementasan. Anda bahkan dapat melakukan stage melalui SVN ke direktori lain di Prod.

Untuk menggunakan, Anda dapat menggunakan RoboCopy dan perintah / XD untuk mengecualikan direktori .svn. Anda dapat menggunakan alat penyebaran web Microsoft dan membatasi direktori dengan itu. Anda dapat menggunakan dan menjalankan di atas for /r YOURPATH %f in (.svn) do rd /s /q "%f"jika perlu juga.

Hanya saja, jangan menyebarkan direktori ini ke situs web produksi.

Christopher_G_Lewis
sumber
1

Jangan gunakan subversi. Serius.

Dari komentar Anda, tampak bahwa Anda menggunakan alat yang salah untuk pekerjaan itu. Subversion adalah alat yang hebat untuk pengembang Anda, tetapi itu bukan alat penyebaran / mirroring. Jika tujuan Anda hanya menyalin file dari server staging / test Anda ke server produksi Anda dengan bandwidth dan waktu minimum, maka saya sarankan Anda menggunakan rsync . Sekarang, karena saya seorang admin Unix, mungkin ada beberapa Windows yang setara dengan rsync yang tidak saya ketahui, jadi Anda mungkin ingin melakukan riset. Namun, Anda dapat menggunakan rsync di bawah Cygwin atau cwrsync .

Rsync memungkinkan Anda untuk merefleksikan direktori pada satu server dengan direktori yang lain. Ini menghitung delta antara dua server dan hanya menyalin perbedaannya. Tidak hanya itu, tetapi juga menekan delta dan, secara opsional, dapat mengenkripsi juga.

Swoogan
sumber
.... +1 untuk rsync
Jason S
Diperbantukan. Masalah utama dengan mencoba untuk secara aktif menyembunyikan file adalah bahwa jika aturan pawang atau menulis ulang yang Anda tempatkan jatuh, semua file tiba-tiba terbuka lagi. Jika Anda memiliki copy pekerjaan Anda di lingkungan pengujian atau penyebaran pribadi dan kemudian semua yang Anda butuhkan adalah tombol 'publikasikan' merah besar (skrip kecil) yang rsyncs dari lokasi itu ke server langsung. rsync dapat dengan mudah dikonfigurasikan untuk mengabaikan jalur / pola file dan akan mengunggah sebagian besar perubahan dalam sekejap, dan hampir senyaman pengaturan Anda saat ini.
SmallClanger
0

Praktik terbaik adalah sistem penyebaran otomatis yang mengekspor dan menerbitkan setelah pembaruan SVN dibuat. Pertimbangkan Hudson misalnya. Ada beberapa lagi, tetapi karena kita tidak memerlukannya, saya tidak mendapat informasi dengan baik

Greetz, GHad

GHad
sumber
Kami ingin menghindari ekspor karena sejumlah masalah, seperti bandwidth dan kecepatan koneksi. Pembaruan hanya menarik hal-hal yang telah berubah, yang membatasi jumlah barang yang ditarik secara drastis, yang merupakan faktor utama bagi kami. Selain itu, kami tidak ingin semuanya diperbarui secara otomatis, jadi walaupun Hudson dari CC.Net akan menyediakannya, itu tidak membantu kami di sini karena kami akan memperbarui produksi secara manual.
cdeszaq
jika Anda memperbarui secara manual, mengapa WC Anda tidak ada di area yang tidak dilayani oleh server web, dan salin file yang diperbarui dari direktori itu ke direktori yang dilayani. Anda mendapatkan manfaat dari pembaruan jaringan yang cepat, dengan biaya beberapa ruang disk.
gbjbaanb
0

Saya menjadwalkan skrip di server produksi saya yang mencari .svn dan hanya menghapus file. Saya tidak berpikir ini akan berhasil dalam kasus Anda.

for /r YOURPATH %f in (.svn) do rd /s /q "%f"

Jika menghapus file bukan opsi, Anda dapat menempatkan keamanan dasar pada direktori melalui IIS (kata sandi, atau batasan IP). Ini akan menghentikan IIS dari melayani konten untuk pengguna yang tidak sah.

Semoga berhasil!

Tukang jahit
sumber
Menghapus direktori .svn bukanlah suatu pilihan, karena kami akan kehilangan kemampuan copy pekerjaan. Apakah ada cara skrip untuk mencari melalui pohon dan menambahkan batasan IIS itu? Tugas melakukan ini secara manual terlalu besar, dan kehilangan otomatisasi yang disediakan subversi.
cdeszaq
Tidak diragukan lagi ada. Saya belum pernah menulis sesuatu seperti itu sebelumnya, jadi mari berharap orang lain merespons.
Snipper