Как изтеглих изходния код на собствения си сайт
Ясно е, че всеки студент вече се е опитал да изтегли %sitename% чрез .svn, така че веднага изоставих тази идея, но ми се иска да опитамgit clone %sitename%/.git/. За начало деактивирах 404 на .git* на собствения си сайт и създадох git хранилище в публична директория...
$ git init && git add. && git commit -m 'Тест' Инициализирано празно Git хранилище в /home/ilyaplot/data/www/web/.git/ [master (root-commit) d3dcdf3] Тест 15 променени файла, 713 вмъквания(+) . Сега можете да опитате да получите новосъздаденото хранилище
$ git clone http://******.com/.git/ Клониране в „******.com“. фатално: http://'******..com/.git/info/refs не е намерено: изпълнихте ли git update-server-info на сървъра? Както се оказа, не всичко е толкова просто. За да бъде клонирано хранилището по този начин, е необходимо да се изпълниgit update-server-infoв папката на проекта, което по очевидни причини не мога да направя. Оказва се, че всичко, от което се нуждаем, за да направим това, е един .git/info/refs файл, съдържащ комит хеша за HEAD. Защото хешът на ангажирането може да бъде получен от .git/refs/heads/master, тогава можете просто да направите прокси скрипт, който ще върне това, което git очаква да получи. Имам много прост PHP скрипт. Току-що създадох контролер в моя проект Yii2 със следното съдържание:
И добавено правило към urlManager
Сега мога да опитам да клонирам собствения си сайт, като използвам собствения си сайт. Трябва да има виц за монитора
Опитайте $ git clone http://******.com/git/******.com Клониране в „******.com“. $ ls ******.com/ assets css favicon.ico изображения js robots.txt карти на сайта Сработи! След това тествах този метод насайтове - гиганти, получиха очакваното. Нищо. След това направих списък с милионите най-посещавани сайтове в Интернет и го прегледах целия. Очаквах да получа много източници, но от 1 милион сайта бяха изтеглени само 4. На 126 от сайтовете, които проучих, получих .git/refs/heads/master с комит хеш, но не можах да клонирам хранилището поради факта, че системата за маршрутизиране на тези сайтове издаде 404.
Разбира се, очаквах повече, затова реших да проверя колко повече или по-малко сайтове могат да се изтеглят чрез .svn. Намерих Python grabber, настроих го за същия списък от милион сайтове и го стартирах. Бяха изтеглени няколкостотин сайта.
И в заключение ще дам няколко съвета.
- Сега проверете дали /.git/index е наличен на вашия сайт, като използвате обикновен браузър. Ако не получите 403 или 404, следните стъпки са за вас.
- Настройте сървъра си така, че да връща 404 на .svn и .git.
- Извадете изходния код на сайта, който не трябва да се получава от клиента извън публичната директория.
- Може да си струва да промените паролите, използвани в конфигурациите, URL адреса за достъп до административния панел и да изтриете сервизните скриптове от публичната директория.
UPD: kaimi_ru сподели връзка към скриптове за 5 системи за контрол на версиите github.com/kost/dvcs-ripper
Можете да помогнете и да прехвърлите средства за развитието на сайта