ahu
0.01D
0.02D

请各位站长注意 .git 目录安全隐患

  •  2
     
  •   ahu · Apr 27, 2024 · 8136 views
    This topic created in 928 days ago, the information mentioned may be changed or developed.

    简单搜了一下,貌似还没人在 V2 发过相关话题?


    刚才正在搬砖,突然收到一个新邮件提醒(全英文的)。下意识以为是垃圾邮件,但并不是。

    仔细一看,原始是我管理的某个网站被 Repo Lookout 扫出了 .git 目录安全隐患。具体而言就是,该网站下的这 2 个 URL 路径是可以直接被任何人访问的:

    http://网站域名/.git/config

    http://网站域名/.git/logs/HEAD

    Repo Lookout 就是从这个文件里找到我的邮箱,给我发了一封告警邮件。

    虽然这个问题暂时没要命,但的确能够看到不少相对敏感的信息。你也赶紧去检查一下吧!


    如何解决?在他们网站都已经介绍了,去看看便知。简言之,就是设置你的 web server 限制 .git 路径访问。

    Nginx 配置加上

    location ~ /\.git {
        deny all;
    }
    

    或

    location ~ /\.git {
        return 404;
    }
    

    Apache 配置加上

    • Apache 2.4
    <DirectoryMatch "/\.git">
        Require all denied
    </DirectoryMatch>
    
    • Apache 2.2
    <DirectoryMatch "/\.git">
        Deny from all
    </DirectoryMatch>
    

    Caddy 配置加上

    respond /.git* 403
    

    或

    respond /.git* 404
    

    最后记得修改完配置后要重启 web server 哈。

    29 replies  •  2024-07-18 12:44:04 +08:00
    drymonfidelia
    drymonfidelia
    Apr 27, 2024
    1
    纯静态网站还没用 webpack 之类的打包工具吗,实在想不到 .git 出现在 wwwroot 应该有问题吧
    crysislinux
    crysislinux
    Apr 27, 2024 via Android
    2
    @drymonfidelia 古时候很多人是直接在服务器 git pull 的,尤其是 PHP 这种文件到位就能跑的
    rekulas
    rekulas
    Apr 27, 2024❤️30
    3
    这样的非盈利组织真是令人敬佩
    cctv6
    cctv6
    Apr 28, 2024 via Android
    4
    一些 github 上面的项目,web 相关的项目,大多数都是放在一个单独的目录下,比如/html 或者/src 。

    如果直接 index.html 在跟目录下,很多人代码 clone 下来直接就设置成根目录了,.git 就被暴露出来了,在项目里面额外加一层目录就是为了加了一道防线。

    几年前看日志的时候发现过这种请求日志,从那以后,只要是类似这种项目,都会额外加一层目录。

    我一般是只要路径中带点符号,一律 ban 掉。
    ysc3839
    ysc3839
    Apr 28, 2024 via Android❤️2
    5
    最好是 http 服务器直接禁止访问“.”开头的文件,不应该只禁止.git 。同时 package.json 以及 composer.json 等文件最好也禁止访问。
    mingl0280
    mingl0280
    Apr 28, 2024 via Android
    6
    为什么你会把.git 放进网站目录……
    likayi
    likayi
    Apr 28, 2024 via Android
    7
    @mingl0280 git clone
    crackidz
    crackidz
    Apr 28, 2024
    8
    因为很少会有人直接 git clone 下来一个静态网站....
    szdosar
    szdosar
    Apr 28, 2024
    9
    受教了。谢谢 up 主提供信息。
    yc8332
    yc8332
    Apr 28, 2024
    10
    有点安全意识的人谁会直接用 git 去拉代码?不都是发布系统搞吗
    Xc1Ym
    Xc1Ym
    Apr 28, 2024
    11
    git 文件泄露是非常常见的漏洞,属于源码泄露的一种,同时还仍需注意 svn 、idea 、DS_Store 、网站备份文件、web.xml 、js.map 等
    malaohu
    malaohu
    Apr 28, 2024
    12
    不仅仅是 Git

    location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {
    deny all;
    }
    4Et5ShxMIq58n6Lr
    4Et5ShxMIq58n6Lr
    Apr 28, 2024
    13
    正常情况下 .git 不会放到发布目录下吧?
    mingl0280
    mingl0280
    Apr 28, 2024
    14
    @likayi 正确做法:git clone 以后选择性将文件链接/复制到网站目录(大部分 IDE 都可以做到,webstorm 就可以)
    错误做法:直接 git clone 到网站目录然后用 IDE 打开
    Jack927
    Jack927
    Apr 28, 2024
    15
    不只是 git ,web 目录直接 .开头的目录都禁止访问完事。
    proxytoworld
    proxytoworld
    Apr 28, 2024
    16
    以前面试过,怎么通过.git 还原源码
    Jesmora
    Jesmora
    Apr 28, 2024
    17
    这个是吧 git 下来的整个目录当 wwwroot 了吧,被编译过的项目很少出现这个问题
    A1exL
    A1exL
    Apr 28, 2024
    18
    # . files
    location ~ /\.(?!well-known) {
    deny all;
    }

    推荐一下 DO 的 config generator
    https://www.digitalocean.com/community/tools/nginx?global.app.lang=zhCN
    YuukiHibiki
    YuukiHibiki
    Apr 28, 2024
    19
    .git 放在网站目录
    location 也配置到能够访问到.git 目录
    这算两个最基本的安全疏忽吧
    lyxxxh2
    lyxxxh2
    Apr 28, 2024
    20
    php:
    .git 正常都在 public 。
    tp3 这种老年代产品才会,网站目录 = 项目根目录。
    kenvix
    kenvix
    Apr 28, 2024
    21
    直接禁止.well-known 以外的所有点开头的目录就行了🌚
    lyxxxh2
    lyxxxh2
    Apr 28, 2024
    22
    @lyxxxh2
    php:
    网站目录正常都在 public 。
    tp3 这种老年代产品才会,网站目录 = 项目根目录。
    lichao
    lichao
    Apr 28, 2024
    23
    说明根本没有做 deploy 流程
    r4aAi04Uk2gYWU89
    r4aAi04Uk2gYWU89
    Apr 28, 2024
    24
    用个工具叫 githacker ,6 年前我用来 copy 过一个老的 php 站点。刚看了一眼那个工具,1 年前就不维护了。
    现在前端基本都流程化了,很少有前后端一体化的项目,直接把文件夹丢上去了。
    melkor
    melkor
    Apr 29, 2024 via iPhone
    25
    最好用打包工具走一个“编译”过程,只保留需要的部分,这样不仅少暴露文件,还可以提高性能
    baobao1270
    baobao1270
    Apr 29, 2024 via Android
    26
    @crysislinux 也就 10 年前吧,现在很多 php 项目依然是这样部署的。坏了我成古人了。

    @rekulas 也不一定是非赢利组织,也有公司这样扫,邮件点进去就是卖他的安全产品

    @cdlnls
    @ysc3839 .well-known/acme-challenge: ?
    ysc3839
    ysc3839
    Apr 29, 2024 via Android
    27
    @baobao1270 .well-known 是在 http 下的,和 https 配置是分开的。
    baobao1270
    baobao1270
    Apr 29, 2024
    28
    @ysc3839
    我自己的配置都是没有 HTTP ,只有 HTTPS 的。类似这样:
    server {
    listen 80 default_server;
    listen [::]:80 default_server;

    location / {
    return 301 https://$host$request_uri;
    }
    }

    server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    }

    这个时候只要管 HTTPS 就行了,不需要管两套配置增加心智负担。而且这样也不影响 ACME 验证,主流的 CA ( LE 、Google 、Zerossl )都支持重定向的时候切换到 TLS-01 验证,而且不会管证书错误(只要域名对就行)
    kasusa
    kasusa
    Jul 18, 2024
    29
    坏了我成古人了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3784 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 126ms · UTC 10:00 · PVG 18:00 · LAX 02:00 · JFK 05:00
    ♥ Do have faith in what you're doing.