2010-04-21 67 views
0

我在JSP不夠好,但我不知道時,會顯示所有其他字符串以及是什麼導致這樣的問題:人品問題

JSP文件通過他們的名字在查詢人信息聯繫人(MS Exchange)。查詢返回該人的完整信息;並打印出第一個,最後一個名字。帶撇號的姓(例如:O'reilly)完全不顯示。

什麼是可能的解決方案?

在此先感謝

P.S.我知道提問的方式不合適,但我需要以前有過這樣的問題的人的信息。

回答

0

您需要執行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是一種視圖技術,僅用於視圖部分。