2011-12-22 16 views
1

通過瀏覽一些站點(例如https://www.owasp.org/index.php/Main_Page)後,我發現沒有提到以下過程會打開我的危險;消毒?當它不以HTML格式輸出,也不進入SQL查詢

用戶回答一個選擇題。用「答案」作爲隱藏字段發送表單。

.php頁面接受它(驗證它少於100個字符),然後從數據庫中獲取Correct Answer。它比較兩者(使用==比較運算符)。

然後發送

echo "Wrong! The correct answer is ".$correctAnswer; //a hack presumably will always be wrong!!! 

基本上,損傷可能有可能與讓userinput(最多100個字符)會卡到

$playersAnswer = $_POST['checkAnswer']; 

if ($correctAnswer == $playersAnswer){ ....etc 

優勢對我來說,我不需要擔心用戶的答案中的任何字母/符號/字符是strippe d或轉換。因此,我可以使用標點符號,外語甚至是有關javascript的問題,而無需擔心!

+1

所以有什麼問題是什麼呢? – 2011-12-22 10:09:10

+0

「以下過程會導致meup發生什麼危害」以及「基本上會有什麼損失......」 – Gamemorize 2011-12-22 10:10:48

+0

投票不合適。請參閱[關於要避免的問題類型的常見問題](http://stackoverflow.com/faq#dontask) - 「沒有實際的問題需要解決:」我很好奇,如果別人覺得我喜歡。 「'。這是措辭的方式,似乎你已經回答了你自己的問題。 – 2011-12-22 10:11:21

回答

3

如果你要做的就是使用POST變量的比較:

$correctAnswer == $playersAnswer 

有這個沒有危險。

的危險開始的地方,你使用變量 - 在HTML輸出,在數據庫中查詢,在exec()eval()命令.....

+0

好的,這就是我的想法。感謝您的澄清。 – Gamemorize 2011-12-22 10:17:05

+0

...但是您在html輸出中使用了'$ correctAnswer',因此必須進行消毒和/或編碼(具體取決於您是否允許在該變量中解釋爲html的代碼)。 – VolkerK 2011-12-22 10:22:37

+0

@VollerK數據庫中的所有問題都是由我們輸入/審覈的,然後再手動輸入,而不是通過網站輸入,數據庫本身將不得不被黑客入侵以糾正$ correctAnswer。但是,你是對的。 – Gamemorize 2011-12-22 10:26:37