Когда занимался фрилансом делал следующим образом:
1. Создавал отдельную область для демонстрации будущих результатов на сервере и расшаривал доступ по поддомену ***.***.com
2. Закидываю туда голую CMS или Framework в зависимости от того на чём договорились вести разработку
3. Создаю отдельную страничку по адресу work.***.***.com. Там на вход простенькая авторизашка, а внутри страничка поделенная вертикально пополам. В первой части я раз в день выписываю, что было сделано и что можно проверить, а заказчик там же выписывает комментарии. На второй половинке оформленные начальные требования к проекту от заказчика. Чтобы клиент всегда видел, что изначально он сам попросил сделать и когда он в очередной раз решит дополнить/поменять задание не артачился на тему того, что он так изначально и хотел.
На этой страничке работает нотификатор при постах, т.е. если я пишу, что что-то сделано, то клиенту отходит смс-ка и письмо на почту - ровно также, если мне оставят комментарий.
4. Когда проект готов, получаю оплату и после этого выливаю проект клиенту.
P.S. Понравилась схема Ивана с серверами :) Взял на заметку.
По поводу головняков:
Фриланс он и в Африке фриланс и были проекты как документально оформленные, так и "серые". В первом случае проблем никаких не возникало, во втором приходилось перестраховываться.
С серыми работал по двум схемам. Если сумма большая, то 50-100% аванс (как договорится получится), остатки после показа полностью выполненной работы. А вот если сумма маленькая, то работал без аванса.
Иногда были проекты на серверах заказчика с доступами по VPN - там с точки зрения подстраховки всё достаточно сложно было. Т.к. речь там шла о больших суммах, то делал специальные скрипты, которые убивали проект, если не отмотать счётчик 24-часовой. Это на случай, если заказчик решить обмануть и просто отрежет доступы. Конечно, такие манипуляции можно на уровне администрирования зарубить, но мне таких умников не попадалось :)