2010-01-21 57 views
1

我正在嘗試在我的代碼中解決跨站點腳本編寫異常。 我得到的線的XSS錯誤,我是用JS代碼裏面JSP表達式JavaScript中的跨站點腳本編制

例如: 一個JS函數內部

function ex(){ 
    ..... 
    var loc = '<%= location.getLocDetails()>'; 
    ..... 
} 

請讓我知道,如果你有任何解決方案/解決方法?
注:location.getLocDetails()返回一個字符串

+0

'location.getLocDetails()'返回什麼? JS運行時源代碼如何,網站的網址是什麼?你真的在這條線上發現錯誤,或者你正在嘗試使用'loc'嗎? – Kobi 2010-01-21 06:15:37

+1

做一個查看源代碼並用最終得到的值代替location.getLocDetails() – 2010-01-21 06:17:21

回答

1

還有的僅僅意味着XSS的風險,如果location.getLocDetails()可以返回用戶控制輸入。如果它例如從HTTP Accept-Language頭返回值直接而沒有任何語法檢查或轉義,那麼確實存在XSS風險的手段。

你應該總是逃逸用戶控制輸入期間顯示,至少能在一定程度上由客戶機進行控制,包括HTTP請求頭和請求URL的每一個的輸入。它基本上是相當簡單的,只需使用一個顯示工具,它逃離HTML實體<,>,"'

在JSP的情況下,最簡單的方法是使用JSTL(只需在/WEB-INF/lib中刪除jstl-1.2.jar,如果尚未完成)<c:out>標記爲此。因此,具體的線路應該由(假設location在頁面,請求,會話或應用範圍已發售)來代替:

var loc = '<c:out value="${location.locDetails}" />'; 

這就是說,它是正確的時候在擺脫所有小腳本的你JSP文件,它只會讓它更好:)要了解更多關於JSTL,read this

+0

來更新你的問題。另一種逃避它的方法是使用$ {fn:escapeXml(location.locDetails)}。我覺得它不那麼混亂。 – 2010-02-03 12:36:18

+0

@Manolo Santos:味道的問題。如果在HTML標籤內,例如'',那麼'fn:escapeXml'就更好了。如果在外面,對我無關緊要。然而'c:out'作爲一個標籤,你可以在其中放入多個表達式。 – BalusC 2010-02-03 12:48:25