作爲除已有的答案:一個非常重要的事情,以保持考慮到針對Cross Site Scripting attacks的保護。你必須假設「所有輸入都是邪惡的!」。用戶不僅可以輸入他們的名字或類似的名稱,還可以輸入JavaScript(XSS或甚至持久的XSS,如果保存輸入)或部分SQL查詢來執行SQL注入。
假設您的腳本接受GET或POST的變量txtname
(這是$_REQUEST
的含義)。你有這樣的代碼:
<?php echo "Welcome!" .$_REQUEST['txtname']; ?>
一個可以建立這樣一個鏈接:
http://yourhost/yourscript.php?txtname=<script%20type="text/javascript">alert("This%20might%20also%20be%20an%20evil%20script!");</script>
然後一個使用網址縮短服務,建立上述某個貌似無害的鏈接重定向到攻擊者的網址,例如
http://short.xy/dfudf7
這會將用戶重定向到上面的惡意JavaScript鏈接。然後你的網站將執行任何JavaScript或嵌入的邪惡iframes
或攻擊者想要的任何東西。您的用戶/客戶只會在地址欄中看到您的網站,並會認爲所有來自您的網站,儘管黑客向他們所查看的網站添加了惡意內容。因此,無論何時您輸出直接或間接來自用戶輸入的內容(無論是通過$_REQUEST
讀取還是從數據庫中獲取),都必須確保HTML特殊字符如<和>不能工作更多! php提供的功能htmlspecialchars到轉義這些危險字符。然後,它們就像文本一樣顯示,不能用作HTML/JavaScript。
順便說一下,這不是針對SQL注入的保護。如果您打算稍後使用數據庫,則還必須查找該數據庫。同樣在這個區域中有功能在將用戶輸入傳遞給數據庫之前「去除」用戶輸入。