假設我有一個應該允許幾乎任何合理的字符串名稱的東西(IE這樣的問題的標題),表單元素。安全unicode字符串/名稱
我如何驗證字符串是合理的,並沒有什麼奇怪的或不安全? (這裏假設類似的Unicodeemoticons☺是合理的)
檢查所有的轉義字符像換行,換頁等,當然是給定的。像長度這樣的東西很難,因爲英文的描述性名字很難用1個字符,但是在中文中很小。
有〜31個的Unicode類,哪些是安全的?
的會是什麼Javascript或C#中的正則表達式完整或類似的檢查是什麼樣子?
假設我有一個應該允許幾乎任何合理的字符串名稱的東西(IE這樣的問題的標題),表單元素。安全unicode字符串/名稱
我如何驗證字符串是合理的,並沒有什麼奇怪的或不安全? (這裏假設類似的Unicodeemoticons☺是合理的)
檢查所有的轉義字符像換行,換頁等,當然是給定的。像長度這樣的東西很難,因爲英文的描述性名字很難用1個字符,但是在中文中很小。
有〜31個的Unicode類,哪些是安全的?
的會是什麼Javascript或C#中的正則表達式完整或類似的檢查是什麼樣子?
如何驗證字符串是否合理,而不是奇怪或不安全?
目前尚不清楚你的「不安全」的意思。正如@gmiley所說,你無法通過過濾輸入來防止像XSS這樣的注入問題;這是一個輸出轉義問題。
至於 '合理' 的一個很好的起點是:
至於你提到的禁止控制字符:U + 0000-U + 001F和U + 007F-U + 009F,減去換行和也許標籤,如果你想允許這些。
尤其對於Web應用程序,根據unicode-xml注意,不允許「不適合用於標記」的字符。這可以防止佈局技巧,如Right-to-Left-Override。
Unicode範式(String.Normalize
在C#),例如範式C到規範的代碼點相結合的口音,或者範式KC也拉平古怪像fullwidth
文本,你可能會或可能不希望依賴於做聽衆。
如果你不喜歡Zͪa̻͍lg̐ͦ͢oͬ̓ṯ̺ͮěͧ̚͞ẋ͕ṱ̢͖̩̮̆ͤ你可能會考慮limiting consecutive combiners。
只是爲了上下文,你試圖讓它安全的是什麼?插入數據庫,XSS或未經驗證的用戶輸入是否安全? – gmiley
以上全部。 – Cine
那麼只要你使用參數化查詢來執行你的sql命令,任何輸入對於sql注入都是安全的。此時,您只需在數據庫中指定要存儲數據的列是unicode。當您顯示任何內容時,您都希望確保使用HTML編碼過程,這些過程可用於JavaScript以及大多數服務器端腳本語言。 – gmiley