這個錯誤訊息是 Lint 警告,提醒你 啟用 JavaScript 可能會導致 XSS(跨站腳本攻擊),但這不是編譯錯誤,你仍然可以執行程式。
為什麼 setJavaScriptEnabled(true) 會有安全問題?
-
XSS(跨站腳本攻擊)
-
如果 WebView 加載的是不受信任的內容(如網頁 URL),惡意腳本可能會被執行,進而竊取用戶資訊。
-
-
惡意網站可執行 JavaScript
-
若用戶點擊某個惡意連結,該網站可以透過 JavaScript 讀取本機存儲的資料,或執行惡意行為。
-
-
可能影響應用程式的安全性
-
WebView 本身沒有「沙箱機制」,若載入外部網站並允許 JavaScript,可能會讓應用程式暴露在安全風險之下。
-
如何安全地使用 setJavaScriptEnabled(true)?
如果你確定要啟用 JavaScript,請確保:
-
只載入受信任的內容
-
避免載入外部 URL,建議只顯示 本地 HTML(assets 內) 或 可信的網站。
-
若一定要載入外部 URL,可限制允許的網域:
-
-
禁止 JavaScript 內的
window.open-
防止惡意網站開啟新窗口執行攻擊:
-
-
停用
file協議,防止本地文件讀取漏洞-
這樣可以避免 JavaScript 讀取你的應用程式內部檔案:
-
-
防止 JavaScript 透過 WebView 與 App 互動
-
避免使用
addJavascriptInterface,這可能會讓惡意 JavaScript 竊取用戶資料。 -
如果一定要使用,請加上
@JavascriptInterface,並確保方法內不執行敏感操作:
-
如何忽略這個 Lint 警告?
如果你確保 JavaScript 安全可用,且不想看到這個警告,可以:
-
在
setJavaScriptEnabled(true)上加入註解(不建議)⚠ 注意:這只是忽略警告,並不會修正潛在的安全風險!
-
在
lint.xml內忽略這個警告(如果你的團隊確定要這樣做)
結論
這個警告只是提醒你 setJavaScriptEnabled(true) 可能帶來 XSS 風險,如果你的 WebView:
✅ 只載入受信任的內容
✅ 不允許未知網站開啟新窗口
✅ 不允許讀取本地文件
✅ 不使用 addJavascriptInterface 與 JavaScript 互動
那麼這個設定是相對安全的,你可以放心使用。
如果你是開發 WebView App(如內嵌瀏覽器),還是建議 考慮使用 Custom Tabs,這樣能提高安全性,並讓系統瀏覽器處理 JavaScript。
沒有留言:
張貼留言