目前,我正在特定網(wǎng)頁上顯示一個鏈接,其中包含用戶通過 POST 請求設置的 URL。該網(wǎng)站會顯示給顯示該鏈接的第二個用戶(用戶 2)。單擊該鏈接后,它將返回到用戶 1 的網(wǎng)頁(或者這就是它的預期目的)。但最近出現(xiàn)了這樣的情況,如果 URL 被修改或者用戶 1 是壞用戶,它將 URL 設置為Javascript://%0Aalert(document.domain)//,當單擊鏈接時它將執(zhí)行腳本。如何在 Java 中驗證此 URL,并防止用戶 1 在 POST 請求傳入時將其設置為 URI?
1 回答

繁花如伊
TA貢獻2012條經(jīng)驗 獲得超12個贊
有(至少)兩種方法可以解決這個問題,您可以一起使用或單獨使用:
解析收到的 URL 并檢查其所有組成部分(方案、主機名、端口、路徑、查詢字符串等)是否包含您的應用程序通常生成的合理值,并且您相信這些值是無害的。
特別是,只需檢查該方案是否
http
和/或https
足以阻止您問題中提到的特定攻擊,盡管您幾乎肯定應該做更多的驗證,而不僅僅是這樣。最初生成 URL 時,計算其加密消息身份驗證代碼(使用存儲在服務器上且從未發(fā)送到客戶端的密鑰)并將其與 URL 一起發(fā)送。當您收到客戶端返回的 URL 時,請驗證 MAC 是否仍然匹配。
這是一種通用技術(shù),用于確??蛻舳?em>應原樣轉(zhuǎn)發(fā)回服務器的值不被篡改。如果您有多個此類值,而不僅僅是一個 URL,您可以將它們?nèi)烤幋a為單個字符串,并計算所有這些值的單個 MAC。只需確保編碼是確定性的,以便在驗證 MAC 時可以準確地重復它。此外,您可能希望將其他元數(shù)據(jù)(例如用戶 ID 和/或時間戳)組合到 MAC 輸入中,以防止重放攻擊。
添加回答
舉報
0/150
提交
取消