這陣子在幹壞事的時候才發現國內一些站台都沒有處理好… XD (我絕對沒有說是哪些站喔,自己裝 Web Developer 用他的 View Form Information 看吧 XD)
直接以程式碼舉例。我在我自己的站上放一個 html,裡面有一個 form 與一段 javascript,會自動 submit 出去:
<form
action="http://dingding.example.org/delete-my-account.php"
id="myform" method="post" name="myform">
<input ... /> (某些需要的欄位)
</form>
<script>
var f = document.getElementById("myform");
f.submit();
</script>
如果網站沒有正確處理,就可以讓別人幫你砍帳號,或是發文章 (Spam 的好方法?),或是其他事情。這是因為瀏覽器連到 dingding.example.org 的時候會帶 cookie 進去。
解法也很簡單,用類似 Double Cookie 的方式解決。以 PHP 為例,產生 form 的時候多送一個 hidden input:
<input type="hidden" name="doublecookie"
value="<?= md5(session_id()) ?>" >
然後在接收 form 的程式碼裡面判斷:
if (!isset($_POST["doublecookie"]) ||
$_POST["doublecookie"] != md5(session_id())) {
// not match, break it
}
你可以看到 Google 的 Blogger 就是用類似的方法做的。在 securityToken (被我劃掉的地方) 的地方:(點小圖看 1024×1024 的大圖,不過我為了塞到一頁裡面,字縮小了兩次…)


Pingback: PHP SQL Injection 和 XSS 的偵測程式 和 程式撰寫注意事項 - 2008 | 鬼仔's Blog