我在JSP不夠好,但我不知道時,會顯示所有其他字符串以及是什麼導致這樣的問題:人品問題
JSP文件通過他們的名字在查詢人信息聯繫人(MS Exchange)。查詢返回該人的完整信息;並打印出第一個,最後一個名字。帶撇號的姓(例如:O'reilly)完全不顯示。
什麼是可能的解決方案?
在此先感謝
P.S.我知道提問的方式不合適,但我需要以前有過這樣的問題的人的信息。
我在JSP不夠好,但我不知道時,會顯示所有其他字符串以及是什麼導致這樣的問題:人品問題
JSP文件通過他們的名字在查詢人信息聯繫人(MS Exchange)。查詢返回該人的完整信息;並打印出第一個,最後一個名字。帶撇號的姓(例如:O'reilly)完全不顯示。
什麼是可能的解決方案?
在此先感謝
P.S.我知道提問的方式不合適,但我需要以前有過這樣的問題的人的信息。
您需要執行PreparedStatement
而不是Statement
的SQL查詢,否則您的SQL查詢將中斷(並且也傾向於SQL injections)。
想象一下下面的查詢:
SELECT foo FROM tbl WHERE name = 'O'Reilly'
這將產生一個SQL語法錯誤。如果您檢查了服務器日誌,您應該看到了這一點。當您使用servlet而不是JSP來完成任務時,您應該已經在屏幕上看到了這一點。
SELECT foo FROM tbl WHERE name = 'O\'Reilly'
這樣做SQL明白這個查詢,並可以毫無問題執行:隨着PreparedStatement
如下查詢將進行消毒。
另一方面,您需要HTML轉義結果,否則它將傾向於XSS attacks。
想象一下以下顯示:
<input type='text' value='${name}'>
如果${name}
是O'Reilly
,那麼HTML將有效地結束了作爲
<input type='text' value='O'Reilly'>
,你會只看到O
。如果名字是'><script>alert('xss')</script><input type='text' value='
會發生什麼?爲了解決這個問題,使用JSTL fn:escapeXml
顯示輸入:
<input type='text' value='${fn:escapeXml(name)}'>
(它是由多個推薦使用雙引號,而不是singlequotes的方式,以上只是一個例子)
這就是說,你應該在技術上也不要在JSP文件中這樣做。原始Java代碼屬於Java類,不屬於JSP文件。 JSP是一種視圖技術,僅用於視圖部分。