假設我解析了某個用戶提交的日誌文件,並將解析的數據存儲在MySQL數據庫中。MySQL如何正確處理包含代碼/跨站點腳本的行?
現在,如果用戶足夠的話,他可以提交一個包含類似於nickname=<script>alert(hello);<script>
的行的日誌文件。解析器會抓取後面的所有內容,等於符號並執行INSERT INTO nicknames (name) VALUE ('<script>alert(hello);</script>')
。
我試了一下,發現mysqli_real_escape_string()
正在阻止日誌文件中的一行(如nickname=' AND 1 = 2
)通過轉義'
來中斷查詢。 我認爲它也會處理<script>
/<
/>
和其他代碼/字符,但顯然我錯了。
在上述情況下,當用戶提交包含行nickname=<script>alert(hello);<script>
的日誌文件時,nicknames.name
列將保留值<script>alert(hello);<script>
。
後來從表中讀取這些值並顯示在網站上的<table>
中的每行一個暱稱。當然它不會在這種情況下顯示「暱稱」;跨站點腳本正在執行。而不是包含暱稱的表格行,會彈出一個消息框,說'你好'。
是否有任何常見的方法來防止使用類似mysqli_real_escape_string()
的函數進行跨站腳本編程?什麼是適當的解決方案這個問題,或者甚至可能是最好的?
Ofcourse我可以脫掉INSERT
荷蘭國際集團入列前<
和>
,但我寧願的方式,將剛剛即使在它<script>
標籤顯示的暱稱,在表中。
問候
正是我在找的東西,謝謝! – phew