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

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

  •  2
     
  •   ahu · 12 天前 · 5274 次点击

    简单搜了一下,貌似还没人在 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 哈。

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

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

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

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

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

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

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

    @cdlnls
    @ysc3839 .well-known/acme-challenge: ?
    ysc3839
        27
    ysc3839  
       10 天前 via Android
    @baobao1270 .well-known 是在 http 下的,和 https 配置是分开的。
    baobao1270
        28
    baobao1270  
       10 天前
    @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 验证,而且不会管证书错误(只要域名对就行)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1000 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:17 · PVG 04:17 · LAX 13:17 · JFK 16:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.