Вопрос: Как предотвратить использование Apache в каталоге .git?


Я начал использовать git для развертывания веб-сайтов для тестирования. Как я могу запретить apache обслуживать содержимое каталога .git?

Я пытался

<Directorymatch "^/.*/\.svn/">
Order deny,allow
Deny from all
</Directorymatch>

без успеха.

Я знаю, что я могу создать файл .htaccess в каждом каталоге .git и запретить доступ, но мне хотелось, чтобы я смог поместить в основной файл конфигурации, который делает этот глобальный доступ ко всем веб-сайтам.


57
2018-03-31 12:11


Источник


Как только вы запретили Apache обслуживать каталог, вам также может потребоваться скрыть каталог .git с «IndexIgnore .git», если в вашем каталоге включены индексы. - Ryan


Ответы:


Это не потому, что у вас есть «svn», а не «git» в правиле?

<Directorymatch "^/.*/\.git/">
Order deny,allow
Deny from all
</Directorymatch>

42
2018-03-31 12:45



Когда я создаю .htaccess, содержащий только ваш код, я получаю ошибку: «<DirectoryMatch не разрешен здесь» - Shoan
Это должно быть в Apache conf. Видеть: httpd.apache.org/docs/1.3/mod/core.html#directorymatch - sinping
Простейшим регулярным выражением является <DirectoryMatch /\.git/> - Bachsau
Проверьте это для идеального решения magento.stackexchange.com/questions/202840/... - Pratik Kamani


Это имеет тот же эффект, что и многие другие ответы, но намного проще:

RedirectMatch 404 /\.git

Это может .htaccess или ваш файл конфигурации сервера. Он скрывает любой файл или каталог, имя которого начинается с .git (например, .git каталог или .gitignore файл), возвращая 404. Таким образом, скрытое содержимое вашего Git-репо скрыто, его существование также скрыто.


109
2017-08-01 10:19



Мне действительно нравится это решение. Это просто и элегантно. - Shoan
Помещение этого в корневой каталог htdocs также выполняет глобальную работу. - jor
Любите этот вариант лучше всего. Мне кажется, что более безопасно возвращать 404 для запросов, таких как /.git или /.gitignore, так что факт, что git даже используется, не может быть определен извне. - Ezra Free
Имейте в виду, что если вы включили списки каталогов, .git папки будут по-прежнему видны, но вы получите 404 при попытке получить к ним доступ. - Andy Madge
@BennettMcElwee yep согласился, почти нет веской причины, чтобы список каталогов включался глобально на производственном сервере. Просто подумал, что это заслуживает упоминания, если он кого-то поймает. - Andy Madge


Если вы не используете файлы .htaccess, но вместо этого хотите использовать /etc/apache2/httpd.conf (или что-то вроде главного файла conf вашего сервера), чтобы скрыть как каталоги .git, так и файлы .gitignore, вы можете использовать следующее. Я нашел ответ выше, поскольку настройка master conf не скрывала файл gitignore.

# do not allow .git version control files to be issued
<Directorymatch "^/.*/\.git+/">
  Order deny,allow
  Deny from all
</Directorymatch>
<Files ~ "^\.git">
    Order allow,deny
    Deny from all 
</Files>

13
2017-08-28 21:49



Не блокировать www.example.com/.git/config файл в Apache httpd 2.4.27. - ilhan


Если вы работаете в общедоступном хостинге и не имеете доступа к apache.conf, вы все равно можете сделать это в файле .htaccess, например:

RewriteEngine On
RewriteRule "^(.*/)?\.git/" - [F,L]

10
2018-03-23 19:21



спасибо, это сработало для меня в ситуации совместного размещения, где главный ответ не - Plato


Чтобы защитить как .git-каталог, так и другие файлы, такие как .gitignore и .gitmodules, используя .htaccess, используйте:

RewriteEngine On
RewriteRule ^(.*/)?\.git+ - [F,L]
ErrorDocument 403 "Access Forbidden"

5
2017-10-28 22:04



Работает для меня, однако конечный ErrorDocument не влияет. С точки зрения безопасности, я бы представил фальшивый 404 над информативным 403 злоумышленнику ... - Frank Nocke
Это плохая идея, потому что она раскрывает информацию хакерам. 403 означает, что он есть, 404 означает, что это не так. Каждый факт в настройке сервера полезен для хакера. Я бы подумал об этом. - GerardJP


### never deliver .git folders, .gitIgnore
RewriteRule ^(.*/)?\.git+ - [R=404,L]

# 2nd line of defense (if no mod_rewrite)
RedirectMatch 404 ^(.*/)?\.git+

Это работает в .htaccess, нет http.conf доступ необходим. Включите это как первое из правил перезаписи. Prepend Rewrite On если нужно.

С точки зрения безопасности я предпочитаю фиктивный 404 более 403, более информативный для атакующего. Прокомментируйте один из двух, чтобы убедиться, что и другое работает для вас.

Btw, хорошие изменения, ваш тест литма для этих двух:

http://localhost/.gitignore
http://localhost/.git/HEAD

5
2018-05-26 10:08



Почему есть оба правила? Простейший RedirectMatch достаточно сам по себе. (Кроме того, регулярные выражения не кажутся совершенно правильными - почему плюс на конце?) - Bennett McElwee
Личная паранойя / двойная безопасность. Если RewriteEngine отключится (изменения в центральной конфигурации, плохое командное общение, неудачное обновление сервера), ... вы называете это :-) + устарел или должен быть $, хороший момент! (нет времени для тестирования, извините.) - Frank Nocke
Если вы беспокоитесь, что RewriteEngine может быть выключен, просто поставьте RewriteEngine On перед вашим RewriteRule. Но в любом случае это тавтологическое и избыточное, потому что проще RedirectMatch хватает на свои собственные. Хотя даже это можно было бы упростить. В основном я рекомендую мой ответ вместо. :) - Bennett McElwee
+1 для теста лакмусовой бумажки.


Я всегда добавляю следующую строку в шаблон vhost

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

Просто убедитесь, что никто не может получить доступ к конкретным данным VCS. Прекрасно работает.


3
2018-03-18 15:48





Предполагая, что ваш веб-сервер использует другого пользователя, кроме того, который вы используете для доступа к репозиторию .git, вы можете отключить бит выполнения для других в каталоге .git.

Это должно работать с другими веб-серверами и не зависит от высокопроизводительных файлов .htaccess.


1
2017-12-11 15:09