See also: Mike Monteiro's "F*ck you, pay me"
Yes, this is a great talk!
Or you can just ask for payment up front. In my experience that solves a lot of the problems that would require a contract.
Agreed, but nevertheless you should write down the basic terms who is responsible for what, what are the deliveries and who owns the content that is created during the project.