58

Capistrano で展開する Subversion の Rails アプリケーションがありますが、「/.svn」内のファイルにアクセスできることに気付きました。これはセキュリティ上の問題を引き起こします。

これを行う最善の方法を知りたかったのです。いくつかのアイデア:

  • アクセスを拒否するグローバル Apache 構成
  • public フォルダーとすべてのサブフォルダーに .htaccess ファイルを追加する
  • パーミッションを変更する Cap タスク

「svn情報」を保持したいので、フォルダーを削除したり、svnエクスポートを使用したりするという考えはあまり好きではありません。

4

13 に答える 13

63

最適なオプションは、Apache 構成を使用することです。

htaccess またはグローバル構成の使用は、主にサーバーを制御するかどうかによって異なります。

もしそうなら、あなたは次のようなものを使うことができます

<DirectoryMatch .*\.svn/.*>
    すべてから拒否
</DirectoryMatch>

そうでない場合は、FilesMatch を使用して .htaccess ファイルで同様のことを行うことができます

于 2008-12-29T16:36:08.090 に答える
44

.svnファイルを保護するもう1つの方法は、Apache構成でリダイレクトを使用することです。

RedirectMatch 404 /\\.svn(/|$)

したがって、403を禁止する(そして攻撃者になる手がかりを提供する)代わりに、404を取得します。これは、パスをランダムに入力するときに予想されるものです。

于 2008-12-29T18:14:50.027 に答える
30

ドットで始まる各ファイルを404するというアイデアは好きではありません。プロジェクトで使用しているcvs(例ではsvn)のいずれかを使用して、より選択的なアプローチを使用します。

RedirectMatch 404 /\\.svn(/|$)

またはすべてのcvsシステムをキャッチ

RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)

-古い答えが続きます(コメントを参照)-

私はまだコメントを書くことができないので...ユーザーは.svnフォルダーにアクセスできませんが、その中のすべてのファイルにアクセスできるため、csextonの答えは正しくありません。たとえば、 http://myserver.com/.svn/entriesにアクセスできます

正しいルールは

RedirectMatch 404 /\\.svn(/.*|$)
于 2010-07-14T23:48:12.607 に答える
14

リカルド・ガリはそれを正しく理解したと思います。apacheでさえすでに.svnの設定が禁止されていましたが、.svn /entriesは確かに利用可能でした...私のsvnサーバー、ポート番号、ユーザー名などを公開しています。

私は実際に、予防策として.gitを制限しないのはなぜだと思います(たとえば、まだgitを使用していませんが、いつかディレクトリの制限について考えなくなるかもしれません)。

そして、とにかく隠すべきものすべてを制限してみませんか?誰かがこれに関する問題を思いつくことができますか?

RedirectMatch 404 /\\..*(/.*|$)

最初の期間の後に「。*」を追加しました-Riccardoとの違いだけです。404 .svn、.git、.blahなどのようです。

于 2011-03-13T02:01:27.577 に答える
6

通常は Web アクセス可能である必要がないため、すべてのドット ファイル (例: .htaccess、.svn、.xxx など) へのアクセスを拒否したいと思います。

これを達成するためのルールは次のとおりです (Apache 2.2 が含まれるまで):

<LocationMatch "\/\..*">
    Order allow,deny
    Deny from all
</LocationMatch>

(更新)または、次を使用できます (Apache 2.2 および 2.4 で動作します)。

# Deny access to dot-files, as 404 error
# (not giving hint about potential existence to the file)
RedirectMatch 404 ".*\/\..*"
于 2012-04-18T09:43:32.687 に答える
1

Apache Subversion FAQ は、この解決策を提案しています:

# Disallow browsing of Subversion working copy administrative dirs.
<DirectoryMatch "^/.*/\.svn/">
    Order deny,allow
    Deny from all
</DirectoryMatch>

ソース: https://subversion.apache.org/faq.html#website-auto-update

于 2016-04-19T09:47:43.640 に答える
1

RedirectMatch は 404 で応答します。これはすばらしいことです。

ただし、「オプション + インデックス」が有効になっている場合、ユーザーは引き続き親ディレクトリから「.svn」ディレクトリを表示できます。

ユーザーはディレクトリに入ることができません。これが「404 Not Found」の出番です。ただし、ディレクトリを確認して、攻撃者の手がかりを提供することはできます。

于 2010-02-23T01:21:25.833 に答える
1

私には思えますが、Apache conf は次のようになります。

<Directory ~ "\.svn">
    Order allow,deny
    Deny from all
</Directory>
于 2011-05-22T22:30:33.930 に答える
1

これ:

RedirectMatch permanent .*\.(svn|git|hg|bzr|cvs)/.* /

エラーをユーザーに送り返したくない場合にも使用できます。

サイトのルートページにリダイレクトされるだけです。また、これは永続的なリダイレクトであるため、ロボットはこの URL の再インデックスを試行しません。

于 2013-04-08T19:55:57.043 に答える
1

私は RedirectMatch があまり好きではないので、代わりに RewriteRule を使用しました。

RewriteRule /\..*(/.*|$) - [R=404,L]

ハイフンは「置換しない」という意味です。上記の例で、正規表現に 2 つのバックスラッシュが含まれている理由もわかりませんでした。

/\\..*(/.*|$)

だから私はそれを取り出しました、そしてそれはうまくいきます。なぜそこに2つ使うのか理解できません。誰か教えてくれませんか?

于 2011-07-12T22:02:22.747 に答える
-7

Subversion サーバーのインストールでアクセス権ファイルを作成します。

たとえば、フォルダ構造が

/svn

/svn/rights/svnauth.conf

構成ファイルを作成し、通常は/etc/httpd/conf.d/subversion.confにある Apache Subversion 構成ファイルにそのファイルのパスを入力します

svnauth.conf ファイルで、権限を次のように定義します。

Foo.com のアクセス権

[foo.com:/トランク/ソース]

dev1=rw

dev2=rw .....

このようにして、1 つのファイルからアクセス権を非常に細かいレベルで制御できます。

詳細については、svn red book を熟読してください。

于 2008-12-29T17:07:44.263 に答える