我有一個網站,告訴輸出是UTF-8,但我從來沒有確定它是。我應該使用正則表達式還是Iconv庫將UTF-8轉換爲UTF-8(留下無效序列)?如果我不這樣做,這是一個安全問題嗎?我是否需要確保輸出數據是有效的UTF-8?
回答
首先,我永遠不會盲目地將它編碼爲UTF-8(可能)第二次,因爲這會導致無效的字符,如你所說。在嘗試這樣的事情之前,我肯定會嘗試檢測內容的字符集是否爲而不是 UTF-8。
其次,如果有問題的內容來自源代碼,您可以控制並控制字符集,例如UTF-8文件或UTF-8數據庫在表格和連接中使用,則我會相信這個來源,除非有東西給我提示,我不能和有一些奇怪的事情發生。如果內容來自您的控制之外的或多或少的隨機位置,那麼更有理由檢查它,並且如果可以檢測到它,可能嘗試從其他字符集重新編碼og變換。所以底線是:這取決於。
至於這是一個安全問題,我不這麼認爲(至少我不能想到任何可能被利用的情況),但我會留給其他人來確定。
不是一個安全問題,但如果您發送無效的UTF-8字節流,您的用戶(尤其是非英語)將會非常惱火。
在最好的情況下(大多數瀏覽器都這麼做),所有無效的字符串都會消失或顯示爲亂碼。最糟糕的情況是,瀏覽器退出解釋你的頁面,並說「無效編碼」。這就是Linux上的一些文本編輯器(即gedit)所做的。如果你有一個以英文爲中心的網站而沒有嚴重依賴一些數學字符或Unicode箭頭,它幾乎沒有任何區別。但是如果你服務的話,比如說一箇中國網站,你可以把它搞砸。
乾杯,
每個人都變得亂七八糟的字符集,所以一般你不能相信任何外部來源。驗證提供的輸入對於聲稱使用的字符集是否確實有效是一種很好的做法。幸運的是,使用UTF-8,您可以對有效性做出相當安全的斷言。
如果用戶有可能發送任意字節,那麼是的,存在不確保有效utf8輸出的安全隱患。但是,根據數據存儲方式的不同,還有一些安全隱患是不能確保輸入輸入上的有效utf8數據(例如,如果允許utf8無效,可以創建一個使用utf8輸入的this SQL injection attack變體utf8),所以你真的應該使用iconv
來將utf8轉換爲utf8的輸入,並避免在輸出上驗證utf8的整個問題。
你想要檢查輸出是否有效的兩個主要安全原因utf-8是爲了避免「超長」字節序列 - 也就是說,字節序列的情況下,意味着像'<
'一些字符,但編碼爲多個字節 - 並避免無效的字節序列。過長的編碼問題很明顯 - 如果您的過濾器將「<
」更改爲「<
」,則它可能不會轉換意味着'<
'但寫入方式不同的序列。請注意,所有當代瀏覽器都會將過長的序列標記爲無效,但有些人可能正在使用舊瀏覽器。
無效序列的問題是,一些utf-8解析器將允許無效序列吃掉無效序列後面的一些有效字節。同樣,如果每個人始終都有當前瀏覽器,則不是問題,但...
- 1. 我是否總是需要執行測試查詢以確保會話有效?
- 2. 是否需要有效的CSS?
- 3. 我是否需要同步確保發生的對象?
- 4. 我是否需要逃避數據庫輸入?
- 5. 我從sqlite獲取對象數據輸出而不是我需要的數據
- 6. 我的輸出是否正確?
- 7. 是否需要保護所有屬性?
- 8. 需要確定ActiveDirectory中的用戶是否仍然有效/有效
- 9. 是否有任何需要確保將正確的數據類型提交給MySQL數據庫?
- 10. 我的listview將不會輸出,是否需要回發?
- 11. 無效輸出緩存是否有
- 12. 檢查XML輸出是否有效
- 13. 我是否需要SDL的main()函數?
- 14. 需要確保我的AJAX腳本是樹立正確的
- 15. 需要檢查文件是否是有效的APK
- 16. 我需要幫助編寫一個程序來確定密碼是否有效
- 17. 如何確保提交的數據是有效的數字對?
- 18. 我是否真的需要規範化我的數據庫?
- 19. 我是否需要安裝SQLite以便SQLiteJDBC有效?
- 20. 我們是否需要ezpublish_legacy?
- 21. 是否有Make調試器?我需要找出別人的makefile
- 22. 需要檢查輸入是否是小數或不是
- 23. PHP PDO,需要確保我明白我的代碼是什麼?
- 24. 如何確定我的Android Google帳戶憑據是否有效?
- 25. 我是否需要一個數據庫以確保與面向消息的中間件直接保持一致?
- 26. 如果我需要保存Backbone.Collection,它是否是代碼味道?
- 27. 是否需要爲skflow.TensorFlowDNNClassifier縮放數據?
- 28. 數據增強 - 是否需要轉移?
- 29. zlib - 頭是否需要gzip'd數據?
- 30. ShareMediaTask是否需要數據連接
數據來自哪裏,您無法確保數據是UTF-8編碼? – Gumbo 2009-07-04 18:15:48