请各位站长注意 .git 目录安全隐患 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ahu
0.01D
0.01D
V2EX    信息安全

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

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

    简单搜了一下,貌似还没人在 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 的,尤其是 PP 这种文件到位就能跑的
    rekulas
        3
    rekulas  
       2024-04-27 23:53:31 +08:00   30
    这样的非盈利组织真是令人敬佩
    cctv6
        4
    cctv6  
       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  
       2024-07-18 12:44:04 +08:00
    坏了我成古人了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     974 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 19:08 PVG 03:08 LAX 12:08 JFK 15:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86