Як я вихідники власного сайту скачав
Зрозуміло, що кожен школяр вже спробував скачати %sitename% через .svn, тому від цієї ідеї я відмовився відразу, зате спробуватиgit clone %sitename%/.git/руки свербіли. Для початку, я на власному сайті відключив 404 на .git* і створив git репозиторій у публічній директорії.
$ git init && git add. && git commit -m 'Test' Initialized empty Git repository in /home/ilyaplot/data/www/web/.git/ [master (root-commit) d3dcdf3] Test 15 files changed, 713 insertions(+) . Тепер можна спробувати отримати щойно створений репозиторій
$ git clone http://******.com/.git/ Cloning into '******.com'. fatal: http://'******..com/.git/info/refs not found: did you run git update-server-info on the server? Як виявилося, не все так просто. Для того, щоб репозиторій можна було схилювати таким способом, необхідно виконатиgit update-server-infoу папці з проектом, що зі зрозумілих причин я зробити не можу. Виявляється, для здійснення задуманого потрібен лише один файл .git/info/refs, що містить хеш комміту для HEAD. Т.к. хеш комміта можна отримати з .git/refs/heads/master, то можна просто зробити проксірующий скрипт, який буде віддавати те, що git очікує отримати. У мене вийшов дуже простий PHP скрипт. Я просто створив контролер у своєму Yii2 проекті наступного змісту:
І додав rule в urlManager
Тепер я можу спробувати схиляти власний сайт за допомогою власного сайту. Тут має бути жарт про монітор
Пробуємо $ git clone http://******.com/git/******.com Cloning into '******.com'. $ls ******.com/ assets css favicon.ico images js robots.txt sitemaps Вийшло! Після цього, я перевірив цей метод насайтах - гігантах, отримав те, що й очікувалося. Нічого. Потім я взяв список із мільйона найбільш відвідуваних сайтів інтернету і пройшов його весь. Я очікував отримати багато вихідних, але з 1 мільйона сайтів вдалося завантажити лише 4. На 126 сайтів з досліджених я отримав .git/refs/heads/master з хеш комміта, але схилювати репозиторій не вдалося через те, що система роутингу цих сайтів видавала 404.
Чекав я, звичайно, більшого, тому вирішив перевірити, а наскільки більше або менше сайтів вдасться завантажити через .svn. Знайшов граббер на пітоні, налаштував на той самий список з мільйона сайтів і запустив. Завантажено кілька сотень сайтів.
І на закінчення дам кілька порад.
- Тепер перевірте доступність /.git/index на вашому сайті через звичайний браузер. Якщо ви не отримали 403 або 404, наступні пункти для вас.
- Налаштуйте ваш сервер так, щоб на .svn і .git він повертав 404.
- Виносьте вихідний код сайту, який повинен бути отриманий клієнтом межі публічної директорії.
- Можливо, варто поміняти паролі, які використовуються в конфігах, url доступу до адмін панелі, видалити службові скрипти з публічної директорії.
UPD: kaimi_ua поділився посиланням на скрипти для 5 систем контролю версій github.com/kost/dvcs-ripper
Ви можете допомогти і перевести небагато коштів на розвиток сайту