Your scores are not entirely correct ... But take this scenario.
Attack example
Imagine that a user has logged into the Official Bank of a fake country - GoodBank.com and has a balance of 1,000,000 gold.
At MaliciousSite.com there is <img> or some other generic JavaScript that forces you to make a GoodBank.com request.
<img> has src of http://www.goodbank.com/account/transfer.php?amount=10000&sentTo=malicioususer .
Now this site has made a request for your user account and made you link to a page that you would not otherwise have.
Now you might think that you can protect yourself from this using only POST, but they are also not safe. The right way is to use CSRF tokens in your forms, and when the form is submitted, you should check that the CSRF token you receive matches the one that was issued.
Do not use these measures to protect yourself :
- Secret Cookies
- Only accept POST requests
- Multipage Forms
- URL Rewriting
Instead, use the token as follows:
<form action="/transfer.do" method="post"> <input type="hidden" name="CSRFToken" value="OWY4NmQwODE4ODRjN2Q2NTlhMmZlYWEwYzU1YWQwMTVhM2JmNGYxYjJiMGI4MjJjZDE1ZDZjMTVi MGYwMGEwOA=="> … </form>
See here for a great explanation: CSRF Cheat Sheet
Layke source share