XSRF vulnerabilities are very hard to fix. More details on them at http://en.wikipedia.org/wiki/Cross-site_request_forgery with a key document found at http://isecpartners.com/documents/XSRF_Paper.pdf which outlines a solution.
In short, an XSRFProtectionToken is passed in each form in a hidden variable, with the XSRFProtectionToken consisting of (pseudocode):
hash(sessionid + actionName + sitewide_secret);
The hash can be MD5 or SHA-1 or whatever. The important thing is that even if a user is logged on with a valid sessionId, the attacker cannot know in advance what the token will be without getting it out of an insecure browser (in which case, you have other problems). Even if the attacker gets access to a token for one action that's less security-risky (like invoking a build), they cannot then replay that token against something more risky (such as creating a new admin user).