Apache에서 .svn 폴더에 대한 거부 액세스
Capistrano와 함께 배포하는 Subversion의 rails 응용 프로그램이 '/.svn'에있는 파일에 액세스 할 수있는 것을 알게되었습니다. 이는 보안 문제를 나타냅니다.
이 작업을 수행하는 가장 좋은 방법이 무엇인지 알고 싶었습니다. 몇 가지 아이디어 :
- 액세스를 거부하는 전역 Apache 구성
- 공용 폴더 및 모든 하위 폴더에 .htaccess 파일 추가
- 권한을 변경하는 작업 제한
나는 'svn info'를 유지하고 싶기 때문에 폴더를 삭제하거나 svn export를 사용하는 아이디어를 좋아하지 않습니다.
가장 좋은 방법은 Apache 구성을 사용하는 것입니다.
htaccess 또는 전역 구성 사용은 주로 서버를 제어하는지 여부에 따라 올라갑니다.
다음과 같은 것을 사용할 수 있습니다.
<DirectoryMatch. * \. svn /.*> 모두 거부 </ DirectoryMatch>
htaccess 파일에서 작업을 수행 할 수 있습니다.
.svn 파일을 보호하는 또 다른 방법은 Apache 구성에서 리디렉션을 사용하는 것입니다.
RedirectMatch 404 /\\.svn(/|$)
403을 금지하는 대신 (그리고 공격자가 될 단서를 제공하는 대신) 경로를 무작위로 입력 할 때 예상되는 404를 입력합니다.
나는 각 파일을 점으로 시작하는 404 아이디어가 마음에 들지 않습니다. 프로젝트에서 사용중인 cvs (예제에서는 svn)를 사용하여 접근 방식을 사용합니다.
RedirectMatch 404 /\\.svn(/|$)
또는 모든 cvs 시스템 잡기
RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)
-오래된 답변이 이어집니다 (댓글 참조)-
아직 주석을 쓸 수 없습니다 ... 사용자가 .svn 폴더에 액세스 할 수 없지만 그 안의 모든 파일에 액세스 할 수 있기 때문에 csexton의 대답은 말할 수 없습니다! 예를 들어 http://myserver.com/.svn/entries에 액세스 할 수 있습니다 .
올바른 규칙은
RedirectMatch 404 /\\.svn(/.*|$)
리카르도 갈리가 옳았다 고 생각합니다. 아파치조차도 이미 .svn 설정이 금지되어 있고 .svn / 항목은 확실히 사용 가능했습니다 ... 내 svn, 포트 번호, 사용자 이름 등을 노출했습니다.
나는 git을 예방 조치로 제한하지 않는 이유를 제공합니다 (아직 git을 사용하지 않습니다. 언젠가는 디렉토리에 대해 생각하지 않을 수도 있음).
그리고 나는 왜 어쨌든 숨겨야 할 모든 것을 제한하지 않을까 생각했습니다. 누구든지 이것에 대한 문제를 생각할 수 있습니까?
RedirectMatch 404 /\\..*(/.*|$)
초기 기간 이후에 '. * '를 추가했습니다. Riccardo와 다른 점만 있습니다. 404 .svn, .git, .blah 등으로 시청.
일반적으로 웹에 액세스 할 필요가 없기 때문에 모든 도트 파일 (예 : .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 ".*\/\..*"
이 :
RedirectMatch permanent .*\.(svn|git|hg|bzr|cvs)/.* /
사용자에게 오류를 다시 보내지는 경우에도 사용할 수 있습니다.
사이트 루트 페이지로만 리디렉션됩니다. URL의 색인을 다시 생성합니다.
RedirectMatch는 404로 응답합니다.
그러나 "Options + Indexes"가 활성화 된 경우 사용자는 여전히 상위 디렉토리에서 '.svn'디렉토리를 볼 수 있습니다.
사용자는 있습니다. 여기에는 '404 Not Found'가 들어갑니다. 그러나 디렉토리를 볼 수 있고 공격 할 수 있습니다.
내가보기에 Apache conf는 다음과 같아야합니다.
<Directory ~ "\.svn">
Order allow,deny
Deny from all
</Directory>
나는 RedirectMatch를 좋아하지 대신 RewriteRule을 사용했습니다.
RewriteRule /\..*(/.*|$) - [R=404,L]
하이픈은 "대체하지 않음"을 의미합니다. 또한 위의 예에서 정규식에 두 개의 백 슬래시가있는 이유를 알 수 없습니다.
/\\..*(/.*|$)
그래서 하나 꺼내서 잘 작동합니다. 왜 거기에서 두 개를 사용하는지 알 수 없습니다. 누군가 나를 깨우쳐 주길 바라나요?
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
mod_alias의 다른 지시문과 마침 RedirectMatch는 대소 문자를 구분하지 않는 파일 시스템에서 대소 문자를 구분합니다 ( mod_alias 문서 참조 ). 그에 따라 모든 버전 제어 시스템의 파일 일치 및 차단에 대한 위의 대답은 뭐니 뭐니해도.
대신에
RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)
또는
RedirectMatch permanent .*\.(svn|git|hg|bzr|cvs)/.* /
이와 같은 것이 필요합니다
RedirectMatch 404 "(?i)/\.?(cvs|svn|git|hg|bzr)"
정말 모든 것을 차단합니다.
- CVS 디렉토리는 대문자입니다. 과
- 앞에 점 (.)으로 시작하지
도움이 되셨기를 바랍니다.
서버 구성 파일의 .htaccess에서.
(1)
RewriteEngine on
RewriteRule "^(.*/)?\.git/" - [F,L]
그리고 (2)
RedirectMatch 404 /\.git
이 두 방법을 .htaccess
파일에 넣으십시오 .
404를 반환하여 이름이 .git로 시작하는 모든 파일 또는 디렉터리를 숨 깁니다. .git 디렉터리 또는 .gitignore 파일과 같습니다.
Subversion 서버 설치에서 액세스 권한 파일을 만듭니다.
예를 들어 폴더 구조가
/ svn
/svn/rights/svnauth.conf
구성 파일을 만들고 일반적으로 /etc/httpd/conf.d/subversion.conf 에서 찾을 수있는 아파치 하위 버전 구성 파일에 해당 파일의 경로를 입력합니다.
svnauth.conf 파일에서 권한을 다음과 같이 정의하십시오.
Foo.com에 대한 액세스 권한
[foo.com:/trunk/source]
dev1 = rw
dev2 = rw .....
이렇게하면 단일 파일에서 훨씬 세분화 된 수준에서 액세스 권한을 제어 할 수 있습니다.
자세한 내용은 svn red book을 참조하십시오.
참조 URL : https://stackoverflow.com/questions/398008/deny-access-to-svn-folders-on-apache
'ProgramingTip' 카테고리의 다른 글
자바 펼쳐 루프 변수 범위 (0) | 2020.12.28 |
---|---|
OSX 10.11 El Capitan에 virtualenvwrapper를 사용할 수 없습니다. (0) | 2020.12.28 |
쿼리를 사용하여 기존 테이블에 대한 SQL 작성 펼쳐 (0) | 2020.12.28 |
ASP.NET MVC 로그인 ReturnUrl이 항상 NULL입니까? (0) | 2020.12.28 |
Maven에서 생성 된 jar에서 리소스를 제외하는 방법은 무엇입니까? (0) | 2020.12.28 |