Bỏ qua các thư mục .svn trong IIS


8

Chúng tôi là một tổ chức phát triển web và gần đây đã chuyển sang sử dụng lật đổ cho hệ thống kiểm soát phiên bản của chúng tôi. Vì việc thực hiện cập nhật nhanh hơn nhiều so với thực hiện xuất và sao chép các tệp, nên các nhà phát triển muốn có thể có máy chủ sản xuất là bản sao hoạt động.

Mối quan tâm duy nhất tôi có với điều này là tất cả các tệp .svn nằm rải rác trên hệ thống và thực tế là một số cá nhân nhập cảnh có thể, có khả năng, đọc nội dung của các tệp trong đó, có thể cung cấp cho họ thông tin mà chúng tôi không muốn có .

Cách tốt nhất / dễ nhất để ngăn IIS phục vụ bất kỳ nội dung nào trong các thư mục .svn đó là gì?


1
Xin chào. Bạn có thể vui lòng làm rõ loại thông tin mà bạn quan tâm cần có trong .svn sẽ không có sẵn trong các tệp được triển khai không?
Geo

Phiên bản nào của IIS? Nếu IIS7, bạn có thể nhận được Mô-đun Viết lại URL và chỉ cần thiết lập một quy tắc đơn giản để bỏ qua các thư mục .svn.
MattB

1
@Geo - các thư mục .svn chứa các bản sao văn bản thuần túy của các tệp trong cơ sở văn bản. Vì các tệp được đặt tên giống nhau trong đó, chỉ cần thêm .svn-base, mọi người có thể xem mã bằng văn bản thuần túy (đây là một trang web cổ điển của ASP). Chúng tôi thà không có điều đó xảy ra.
cdeszaq

@MattB - Máy chủ là IIS6 ngay bây giờ, nhưng cuối cùng sẽ chuyển sang IIS7. Vì vậy, tôi sẽ xem xét mô-đun viết lại sau khi chuyển đổi, nhưng thật không may, máy chủ là IIS6 ngay bây giờ.
cdeszaq

Câu trả lời:


8

"Đừng làm theo cách đó" không trả lời câu hỏi.

Thực tế, tôi thích có một bản sao hoạt động trên máy chủ sản xuất, bởi vì cách đó tôi có thể thực hiện các thay đổi nhanh chóng trong sản xuất (ai chưa bao giờ làm điều đó?) Và kiểm tra lại chúng. Nó phụ thuộc vào nơi bạn muốn thanh trượt an toàn / tiện lợi của bạn và trong nhiều trường hợp đây là một nơi tốt.

Giải pháp tiêu chuẩn trong Apacheland là để các tệp .svn ở đó nhưng báo cho máy chủ web không bao giờ phục vụ chúng. Đây là cách thực hiện với IIS 5-7 trên Windows 2000-2008.

  1. Tải xuống và cài đặt ISAPI_Rewrite - phiên bản Lite sẽ đủ cho mục đích này. Lưu ý các yêu cầu hệ thống bổ sung cho Win 2008. Cảnh báo - trình cài đặt MSI dừng và khởi động IIS.

  2. Bỏ chọn hộp "chỉ đọc" trên thuộc tính của tệp httpd.ini . Nếu bạn đã sử dụng trình cài đặt MSI, thì sẽ có một lối tắt đến tệp httpd.ini trong menu Bắt đầu trong Helicon-> ISAPI_Rewrite

  3. Thêm các dòng này vào httpd.ini :

Các chỉ thị ISAPI_Rewrite trong httpd.ini :

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

Bây giờ, mọi yêu cầu đối với thư mục .svn hoặc nội dung của nó sẽ dẫn đến 404 Không tìm thấy từ máy chủ.


Tôi không nhận thấy rằng tôi đã cài đặt phiên bản cũ hơn, ISAPI_Rewrite2. Phiên bản mới hơn, ISAPI_Rewrite3, bao gồm một ứng dụng có tên "ISAPI_Rewrite Manager" giúp chỉnh sửa tệp dễ dàng hơn một chút và trên Window 2008 Server không xuất hiện yêu cầu khởi động lại IIS. Ngoài ra, tôi đã đăng bài này với một vài chi tiết tại blog của mình: n8v.enteuxis.org/2009/11/iêu
Nathan

"Đừng làm theo cách đó" không trả lời câu hỏi. - stackoverflow trong một nutshell. Cảm ơn đã giải quyết câu hỏi trực tiếp.
John Hargrove

5

Bạn có thể đảm bảo rằng mọi tài khoản người dùng được sử dụng bởi IIS không có quyền truy cập vào các thư mục .svn.

Bạn có thể thực hiện việc này một cách thủ công (không được khuyến nghị) hoặc sử dụng một cái gì đó như tập lệnh xóa MrJangles được kích hoạt để chạy sau khi bạn cập nhật SVN hoặc chạy thường xuyên như một tác vụ theo lịch trình:

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

(lưu ý: Tôi chưa thử nghiệm ở trên, bạn sẽ cần kiểm tra xem nó đang làm gì trước khi dựa vào sản xuất, xem đầu ra của "icacls / trợ giúp" để biết thêm)

(một lưu ý khác: "icacls" là lệnh Vista / 2008, trên các biến thể Windows trước đó, lệnh này là "cacls")


Đó là thiên tài thuần túy!
Richard Slater

5

Sử dụng IIS 7, mở Trình quản lý IIS, chọn nút máy chủ, nhấp đúp vào tính năng Trình xử lý ánh xạ . Nhấp vào hành động Thêm Trình quản lý được quản lý và định cấu hình trình xử lý như sau:

  • Đường dẫn yêu cầu: * .svn / * (ánh xạ ký tự đại diện cho tất cả các tệp trong tất cả các thư mục .svn)
  • Loại: System.Web.HttpForbiddenHandler
  • Tên: Subversion-siêu dữ liệu (bạn có thể chọn một tên khác nếu bạn muốn)

Bây giờ mọi yêu cầu đối với các tệp trong thư mục siêu dữ liệu Subversion có tên .svn trong các trang web alle sẽ trả về điều này:

lỗi server trong ứng dụng '/'

Loại trang này không được phục vụ.

Mô tả: Loại trang bạn yêu cầu không được phục vụ vì nó đã bị cấm rõ ràng. Vui lòng xem lại URL bên dưới và đảm bảo rằng nó được viết đúng chính tả.

URL được yêu cầu: /.svn/text-base/Default.aspx.svn-base

Bạn có thể chọn một loại trình xử lý khác nếu bạn muốn, có thể là trình xử lý FileNotFound sẽ trả về mã trạng thái 404.

Đối với IIS 6 (đã cài đặt và cấu hình ASP.NET 2):

Điều hướng đến thư mục Home> Cấu hình> Ánh xạ và ánh xạ .svn-basephần mở rộng tới %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll. Sau đó, trong machine.config (mà bạn có thể tìm thấy %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG), bạn có thể thêm trình xử lý tương tự như trên cho phần mở rộng, thêm phần tử XML sau đây làm con của phần <httpHandlers>:

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

Điều này sẽ chỉ ngăn khách truy cập yêu cầu các tệp mã nguồn, họ vẫn có thể yêu cầu các tệp khác từ các thư mục .svn. Ánh xạ nhiều tiện ích mở rộng hơn tới aspnet_isapi.dll hoặc tạo ánh xạ ký tự đại diện (sẽ ảnh hưởng đến hiệu suất) và bạn có thể chặn nhiều tệp hơn khỏi yêu cầu.


4

Từ quan điểm bảo mật thuần túy, tôi sẽ đào tạo lại các nhà phát triển của bạn.

Dễ triển khai không nhất thiết là một ý tưởng tốt nếu bạn hy sinh bảo mật.

Bạn đang lên kế hoạch cấu hình để chặn truy cập thông tin nhạy cảm. Điều gì xảy ra nếu cấu hình vô tình thay đổi. Điều gì xảy ra nếu IIS hotFix ngừng hoạt động và thay đổi cách cấu hình của bạn hoạt động. Điều gì xảy ra nếu thư viện bên thứ 3 bạn sử dụng bị lỗi và ngừng hoạt động. Tôi có thể nghĩ ra một số sự kiện cực kỳ có khả năng sẽ phá vỡ cấu hình của bạn và cho phép truy cập vào các tệp này, điều này sẽ HOÀN TOÀN ĐƯỢC TẠO RA bằng cách không có các tệp trên máy chủ ở vị trí đầu tiên.

Bạn nên tạo một kịch bản triển khai sao chép các tệp thích hợp từ máy chủ dàn. Bạn thậm chí có thể chuyển qua SVN sang một thư mục khác trên Prod.

Để triển khai, bạn có thể sử dụng RoboCopy và lệnh / XD để loại trừ các thư mục .svn. Bạn có thể sử dụng công cụ triển khai web của Microsoft và giới hạn các thư mục đó. Bạn có thể triển khai và chạy ở trên for /r YOURPATH %f in (.svn) do rd /s /q "%f"nếu bạn cũng cần.

Chỉ không triển khai các thư mục này đến trang web sản xuất.


1

Đừng sử dụng lật đổ. Nghiêm túc.

Từ ý kiến ​​của bạn, có vẻ như bạn đang sử dụng công cụ sai cho công việc. Subversion là một công cụ tuyệt vời cho các nhà phát triển của bạn, nhưng nó không phải là một công cụ triển khai / phản chiếu. Nếu mục tiêu của bạn chỉ đơn giản là sao chép các tệp từ máy chủ dàn / kiểm tra sang máy chủ sản xuất của bạn với tối thiểu băng thông và thời gian, thì tôi khuyên bạn nên sử dụng rsync . Bây giờ, vì tôi là quản trị viên Unix, có thể có một số Windows tương đương với rsync mà tôi không biết, vì vậy bạn có thể muốn thực hiện một số nghiên cứu. Tuy nhiên, bạn có thể sử dụng rsync dưới Cygwin hoặc cwrsync .

Rsync cho phép bạn nhân bản các thư mục trên một máy chủ với các thư mục trên một máy chủ khác. Nó tính toán một delta giữa hai máy chủ và chỉ sao chép sự khác biệt. Không chỉ vậy, nó còn nén delta và, tùy ý, cũng có thể mã hóa nó.


.... +1 cho rsync
Jason S

Biệt phái. Vấn đề chính với việc cố gắng chủ động ẩn các tệp là nếu quy tắc xử lý hoặc viết lại mà bạn đặt tại chỗ rơi xuống, tất cả các tệp sẽ đột nhiên bị lộ lần nữa. Nếu bạn có bản sao làm việc của mình trong môi trường thử nghiệm hoặc triển khai riêng tư và sau đó tất cả những gì bạn cần là một nút 'xuất bản' lớn, màu đỏ (tập lệnh nhỏ) chuyển từ vị trí đó sang máy chủ trực tiếp. rsync có thể dễ dàng được cấu hình để bỏ qua các đường dẫn / mẫu tệp và sẽ tải lên hầu hết các thay đổi trong một nhịp tim và gần như thuận tiện như thiết lập hiện tại của bạn.
SmallClanger

0

Thực tiễn tốt nhất sẽ là một hệ thống triển khai tự động xuất khẩu và xuất bản sau khi cập nhật SVN được thực hiện. Hãy xem xét Hudson chẳng hạn. Còn ít nữa, nhưng vì chúng tôi không cần, tôi không được thông tin nhiều

Chúc mừng, GHad


Chúng tôi muốn tránh xuất khẩu do một số vấn đề, chẳng hạn như băng thông và tốc độ kết nối. Cập nhật chỉ kéo theo những thứ đã thay đổi, điều này giới hạn số lượng nội dung được kéo mạnh, đây là một yếu tố chính đối với chúng tôi. Ngoài ra, chúng tôi không muốn mọi thứ tự động cập nhật, vì vậy, trong khi Hudson của CC.Net sẽ cung cấp điều đó, nó không giúp chúng tôi ở đây vì chúng tôi sẽ cập nhật sản xuất theo cách thủ công.
cdeszaq

nếu bạn cập nhật thủ công, tại sao không có WC của bạn trong một khu vực không được phục vụ bởi máy chủ web và sao chép các tệp đã cập nhật từ thư mục đó vào thư mục được phục vụ. Bạn nhận được lợi ích của việc cập nhật mạng nhanh, với chi phí của một số dung lượng đĩa.
gbjbaanb

0

Tôi lên lịch một tập lệnh trên các máy chủ sản xuất của mình để tìm kiếm .svn và chỉ cần xóa các tệp. Tôi không nghĩ rằng điều này sẽ làm việc trong trường hợp của bạn.

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

Nếu xóa các tệp không phải là một tùy chọn, bạn có thể đặt bảo mật cơ bản trên các thư mục thông qua IIS (mật khẩu hoặc hạn chế IP). Điều này sẽ ngăn IIS phục vụ nội dung cho người dùng trái phép.

Chúc may mắn!


Xóa các thư mục .svn không phải là một tùy chọn, vì chúng tôi sẽ mất khả năng sao chép làm việc. Có cách nào để tìm kiếm thông qua một cây và thêm các hạn chế IIS đó không? Nhiệm vụ thực hiện thủ công này là quá lớn và mất đi sự tự động hóa mà lật đổ cung cấp.
cdeszaq

Không còn nghi ngờ gì nữa. Tôi chưa viết kịch bản bất cứ điều gì như vậy trước đây, vì vậy hãy hy vọng người khác phản hồi.
Snipper
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.