IISの下の.svnディレクトリを無視する


8

私たちはウェブ開発組織であり、最近、バージョン管理システムにsubversionを使用するようになりました。更新の実行は、エクスポートを行ってファイルをコピーするよりもはるかに高速であるため、開発者は本番サーバーを作業コピーにできるようにしたいと考えています。

私がこれに関して私が持っている唯一の懸念は、システム全体に散らばっているすべての.svnファイルであり、一部の企業の個人が潜在的にそこにあるファイルの内容を読み取ることができ、おそらく彼らが持っていなかったはずの情報を彼らに提供できるという事実です。

IISがそれらの.svnディレクトリ内のコンテンツを提供しないようにするための最良/最も簡単な方法は何ですか?


1
こんにちは。デプロイされたファイルではまだ利用できない.svnにあると思われる情報の種類を明確にしていただけませんか?
Geo

IISのバージョンは何ですか?IIS7の場合、URL書き換えモジュールを取得し、.svnディレクトリを無視する単純なルールを設定するだけです。
MattB

1
@Geo-.svnディレクトリには、テキストベースのファイルのプレーンテキストコピーが含まれています。そこには同じ名前のファイルがあり、.svn-baseが追加されているだけなので、コードをプレーンテキストで表示できます(これはクラシックASPサイトです)。それが起こらないようにしたいのです。
cdeszaq 09年

@MattB-サーバーは現在IIS6ですが、最終的にIIS7に切り替えられます。そのため、切り替え後の書き換えモジュールを調べますが、残念ながら現在サーバーはIIS6です。
cdeszaq 2009年

回答:


8

「そのようにしないでください」は質問に答えません。

実際には、運用サーバーで作業コピーを作成するのが好きです。これにより、運用環境ですばやく変更を加えて(誰も行ったことがないのですか)、チェックインできるようになります。セキュリティ/利便性スライダーをどこに配置するかによって異なります。多くの場合、これは良い場所です。

Apachelandの標準的な解決策は、.svnファイルをそこに残し、Webサーバーにそれらを提供しないように指示することです。これは、Windows 2000-2008上のIIS 5-7でそれを行う方法です。

  1. ISAPI_Rewriteをダウンロードしてインストールします -この目的にはLiteバージョンで十分です。Win 2008の追加のシステム要件に注意してください。 警告 -MSIインストーラーはIISを停止および開始します。

  2. httpd.iniファイルのプロパティの[読み取り専用]ボックスをオフにします。MSIインストーラーを使用した場合、スタートメニューのHelicon-> ISAPI_Rewriteにhttpd.iniファイルへのショートカットがあります。

  3. これらの行をhttpd.iniに追加します

中ISAPI_Rewriteディレクティブhttpd.ini

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

現在、.svnディレクトリまたはそのコンテンツに対する要求は、サーバーから404 Not Foundになります。


古いバージョンのISAPI_Rewrite2をインストールしていることに気付きませんでした。新しいバージョンのISAPI_Rewrite3には、「ISAPI_Rewrite Manager」というアプリが含まれており、ファイルの編集が少し簡単になり、Windows 2008 ServerではIISを再起動する必要がないように見えました。また、私は私のブログでは、いくつかの詳細でこれを掲載しました:n8v.enteuxis.org/2009/11/...
ネイサン

「そのようにしないでください」は質問に答えません。-一言で言えば、stackoverflow。直接お問い合わせいただきありがとうございます。
John Hargrove 2016

5

IISが使用するユーザーアカウントに、.svnディレクトリにアクセスする権限がないことを確認できます。

これを手動で行うか(非推奨)、またはSVNの更新を実行した後に実行するようにトリガーされるMrJangles削除スクリプトなどを使用するか、スケジュールされたタスクとして定期的に実行することができます。

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

(注:上記はテストしていません。本番環境で使用する前に、それが何をしようとしているかを確認する必要があります。詳細については、「icacls / help」の出力を参照してください)

(別の注:「icacls」はVista / 2008コマンドです。以前のWindowsバリアントでは、コマンドは「cacls」です)


それは純粋な天才です!
Richard Slater、

5

IIS 7を使用してIISマネージャーを開き、サーバーノードを選択して、ハンドラーマッピング機能をダブルクリックします。[ マネージハンドラーの追加]アクションクリックし、ハンドラーを次のように構成します。

  • リクエストパス:* .svn / *(すべての.svnフォルダー内のすべてのファイルのワイルドカードマッピング)
  • タイプ:System.Web.HttpForbiddenHandler
  • 名前:Subversion-metadata(必要に応じて別の名前を選択できます)

すべてのサイトで.svnという名前のSubversionメタデータフォルダー内のファイルを要求すると、次のように返されます。

「/」アプリケーションでのサーバーエラー。

このタイプのページは配信されません。

説明:リクエストされたページのタイプは明示的に禁止されているため、提供されません。以下のURLを確認して、スペルが正しいことを確認してください。

リクエストされたURL:/.svn/text-base/Default.aspx.svn-base

必要に応じて、別のハンドラータイプを選択できます。おそらく、404ステータスコードを返すFileNotFoundハンドラーです。

IIS 6の場合(ASP.NET 2がインストールおよび構成されている場合):

[ホームディレクトリ]> [構成]> [マッピング]に移動し、.svn-base拡張機能をにマッピングします%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll。次に、machine.config(で見つけることができます%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG)で、上記と同じハンドラーを拡張機能に追加し、次のXML要素を<httpHandlers>-elementの子として追加します。

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

これは、訪問者がソースコードファイルをリクエストするのを防ぐだけであり、.svnフォルダーから他のファイルをリクエストすることはできます。より多くの拡張子をaspnet_isapi.dllにマップするか、ワイルドカードマッピングを作成すると(パフォーマンスに影響します)、より多くのファイルが要求されるのをブロックできます。


4

純粋なセキュリティの観点から、開発者を再教育します。

セキュリティを犠牲にする場合、展開の容易さは必ずしも良い考えではありません。

機密情報へのアクセスをブロックする構成を計画しています。構成が誤って変更された場合はどうなりますか。IISホットフィックスがダウンし、構成の動作を変更した場合はどうなりますか。使用しているサードパーティライブラリが故障して機能しなくなった場合 私はあなたの設定を壊してこれらのファイルへのアクセスを許可するいくつかの非常に可能性の高いイベントを考えることができます。それは最初にサーバーにファイルがないことによって完全に軽減されます。

ステージングサーバーから適切なファイルをコピーする展開スクリプトを作成する必要があります。SVNを介して、製品の別のディレクトリにステージングすることもできます。

デプロイするには、RoboCopyおよび/ XDコマンドを使用して、.svnディレクトリを除外できます。Microsoft Webデプロイメントツールを使用して、ディレクトリを制限できます。for /r YOURPATH %f in (.svn) do rd /s /q "%f"必要に応じて、上記をデプロイして実行することもできます。

これらのディレクトリを本番ウェブサイトにデプロイしないでください。


1

subversionを使用しないでください。真剣に。

あなたのコメントから、あなたはその仕事に間違ったツールを使用しているようです。Subversionは開発者にとって優れたツールですが、展開/ミラーリングツールではありません。ステージング/テストサーバーから運用サーバーに最小限の帯域幅と時間でファイルをコピーするだけの場合は、rsyncを使用することをお勧めします。さて、私はUnixの管理者なので、知らないrsyncに相当するWindowsがいくつかあるかもしれません。そのため、いくつかの調査が必要になる場合があります。ただし、Cygwinまたはcwrsyncで rsyncを使用できます。

Rsyncを使用すると、あるサーバー上のディレクトリを別のサーバー上のディレクトリとミラーリングできます。2つのサーバー間の差分を計算し、違いのみをコピーします。それだけでなく、デルタを圧縮し、オプションでそれを暗号化することもできます。


.... rsyncの+1
Jason S

出向。ファイルをアクティブに非表示にしようとする場合の主な問題は、配置したハンドラーまたは書き換えルールが失敗すると、すべてのファイルが突然再び公開されることです。テストまたはプライベート展開環境に作業コピーがあり、必要なのは、その場所からライブサーバーにrsyncする大きな赤い「公開」ボタン(小さなスクリプト)だけです。rsyncは、ファイルパス/パターンを無視するように簡単に構成でき、ハートビートでほとんどの変更をアップロードします。これは、現在のセットアップとほぼ同じくらい便利です。
SmallClanger

0

ベストプラクティスは、SVN更新が行われた後にエクスポートおよび公開する自動展開システムです。たとえばハドソンを考えてみましょう。他にもいくつかありますが、必要ないため、十分な情報がありません

GHad、グリーツ


帯域幅や接続速度など、いくつかの問題によるエクスポートは避けたいと考えています。更新は、変更されたものだけをプルします。これにより、プルされたものの量が大幅に制限されます。これは、私たちにとって重要な要素です。さらに、自動更新したくないので、CC.NetのHudsonが自動更新を提供しますが、手動でプロダクションを更新するため、ここでは役に立ちません。
cdeszaq 2009年

手動で更新する場合は、ウェブサーバーが提供していないエリアにWCを配置し、更新されたファイルをそのディレクトリから提供されるディレクトリにコピーしてください。ある程度のディスク容量を犠牲にして、高速ネットワーク更新のメリットを享受できます。
gbjbaanb 2010年

0

.svnを検索してファイルを単に削除するスクリプトを運用サーバーでスケジュールします。これはあなたの場合うまくいくとは思いません。

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

ファイルを削除できない場合は、IISを介してディレクトリに基本的なセキュリティを設定できます(パスワード、またはIP制限)。これにより、IISは権限のないユーザーにコンテンツを提供できなくなります。

幸運を!


作業コピー機能が失われるため、.svnディレクトリを削除することはできません。ツリーを検索してそれらのIIS制限を追加するスクリプト可能な方法はありますか?これを手動で行うタスクは大きすぎ、subversionが提供する自動化が失われます。
cdeszaq 2009年

間違いありません。私は以前にそのようなことをスクリプト化したことがないので、他の誰かが応答することを願いましょう。
スニッパー2009年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.