推 grassboy2:不懂@@a input_code的值不是可以從原始碼看到嗎? 05/06 22:33
→ grassboy2:那…不就連猜都不用猜了@@a 05/06 22:34
→ tkdmaf:看到的是被編碼過的32位元md5文字! 05/06 22:36
→ tkdmaf:除非你會反解MD5,否則你在程式中根本無法得知原始文字。 05/06 22:36
→ evernever:不懂為甚麼要有input_code來判斷要不要desave. 05/06 22:41
→ evernever:直接 desave 有壞處嗎? 05/06 22:41
如果你的程式有一個變數假設叫$test好了!
如果有人塞了一個表單:
<input type="hidden" name="test" value="我要惡搞你的變數!">
然後傳送到你的網站。
你想想$test這個變數會發生什麼事吧!
而且input_code只是用來判斷表單的來源是否合法。
desave()是另行處理$value的安全性內容。
※ 編輯: tkdmaf 來自: 59.104.130.106 (05/06 22:50)
推 LPH66:三樓, 但我如果直接送出可以用的 input_code 不就繞過去了? 05/06 22:49
→ LPH66:重點在於 input_code 並不一定來自你自己的網頁 05/06 22:49
→ evernever:desave 是要做的, 但你的範例 desave $$key 是個問題 05/06 22:51
→ evernever:我的意思是不用input_code, desave都是要做的吧 05/06 22:52
→ evernever:只是要換掉 $$key 05/06 22:52
→ tkdmaf:的確!所以事實上也應該對input_code做判斷! 05/06 22:52
推 LPH66:我個人寫的習慣還是要什麼再自己接 三行就三行管它那麼多 05/06 22:52
→ LPH66:甚至就直接在指令裡用 $_POST['var'] 做運算 05/06 22:53
→ LPH66:(例如數值欄位就過一層 intval 來用這樣) 05/06 22:54
關於LPH66提到的input_code自己寫。
老實說變這樣就很好玩了。
$input_code = md5($_POST["input_code"]);
if($input_code == md5(md5("XXXX"))){
xxxxxx
}
並沒有規定md5不能用二次!
※ 編輯: tkdmaf 來自: 59.104.130.106 (05/06 22:56)
→ evernever:LPH66意思是不論你MD5x2,SHA512..開原始碼還是能得到 05/06 22:58
→ evernever: 可以用的 input_code 05/06 22:58
→ tkdmaf:是能得到啊!但你知道那個碼是被編了幾次的嗎? 05/06 23:02
→ evernever:..不需要知道被編了幾次...可以用就好阿... 05/06 23:03
→ tkdmaf:ABCDEFG的十次md5:5ebedce9c92d556f4b06442a8668ddf1 05/06 23:05
→ tkdmaf:我要不講他是經過十次的ABCDEFG的MD5你能猜得到? 05/06 23:05
<form method="post" action="showmdcode">
<input type="hidden" name="mdword" value="<?=md_code("ABCDEFG",10)?>" />
<input type="submit" value="送出" />
</form>
<?php
function md_code($word,$time = 1){
for ($i = 0 ;$i < $time ;$i++){
$word = md5($word);
}
return $word;
}
?>
那就請你們親自跑跑看這個東西吧!
看看你用原始碼看到的是什麼東西。
※ 編輯: tkdmaf 來自: 59.104.130.106 (05/06 23:06)
→ evernever:input_code=5ebedce9c92d556f4b06442a8668ddf1&hack=xxx 05/06 23:06
→ evernever:你的程式是不是照樣desave? 05/06 23:07
→ tkdmaf:我管你hack什麼鬼?過來先md5一次再說(這樣就11次了!) 05/06 23:07
→ evernever:那你的ABCDEFG是不是也要在md5一次才能對照? 05/06 23:09
→ tkdmaf:input_code比對不通過程式就結束你想跑什麼? 05/06 23:09
→ tkdmaf:請你看LPH66最後一行再往下數第5行!我放了幾個MD5? 05/06 23:10
→ tkdmaf:來源是一次,比對就是做二次!來源11次,比對就做12次! 05/06 23:11
→ evernever:err..你自己送的 md_code("ABCDEFG",10) 會通過.. 05/06 23:11
→ evernever:而我送的 5ebedce9c92d556f4b06442a8668ddf1 就不過? 05/06 23:12
→ tkdmaf:請貼你寫的程式碼上來了。 05/06 23:13
→ evernever:..我沒寫..@@ 05/06 23:14
→ tkdmaf:OK!這部份是你說對。的確是我沒注意到的盲點 05/06 23:27
→ tkdmaf:不過什麼時候大家可以用程式碼來討論程式呢? 05/06 23:27
推 evernever:給推...終於注意到了 05/06 23:29
→ hwakeye:簡單來講md5加密的內容不變的話 一開始只要先從網頁拿到加 05/06 23:30
→ hwakeye:密後的值 再來就可以直接寫script送表單了 05/06 23:30
→ tkdmaf:但原則上既然這是問題!就該再思考解決方案。 05/06 23:32
→ tkdmaf:一開始是想到session,但是並不想去使用session。 05/07 00:03
→ bibo9901:為什麼不想使用session 05/07 01:21
→ tkdmaf:因為只要有人先進到你的網站,session就存在了。 05/07 06:52
→ tkdmaf:一樣變成他愛幹什麼就能幹什麼。\ 05/07 06:53
→ rickysu:這不是CSRF攻擊的基本防禦方法嗎?? 05/07 10:49
推 clubflymf:不錯耶 總算看到討論出跨站假要求的文章了 XD 05/07 12:07