V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ahu
V2EX  ›  信息安全

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

  •  2
     
  •   ahu · 2024-04-27 23:28:17 +08:00 · 6363 次点击
    这是一个创建于 366 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    @cdlnls
    @ysc3839 .well-known/acme-challenge: ?
    ysc3839
        27
    ysc3839  
       2024-04-29 11:26:23 +08:00 via Android
    @baobao1270 .well-known 是在 http 下的,和 https 配置是分开的。
    baobao1270
        28
    baobao1270  
       2024-04-29 11:48:53 +08:00
    @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
        29
    kasusa  
       285 天前
    坏了我成古人了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2907 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:47 · PVG 21:47 · LAX 06:47 · JFK 09:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.