2016-11-30 44 views
0

假設我有一個應該允許幾乎任何合理的字符串名稱的東西(IE這樣的問題的標題),表單元素。安全unicode字符串/名稱

我如何驗證字符串是合理的,並沒有什麼奇怪的或不安全? (這裏假設類似的Unicodeemoticons☺是合理的)

檢查所有的轉義字符像換行,換頁等,當然是給定的。像長度這樣的東西很難,因爲英文的描述性名字很難用1個字符,但是在中文中很小。

有〜31個的Unicode類,哪些是安全的?

的會是什麼Javascript或C#中的正則表達式完整或類似的檢查是什麼樣子?

+0

只是爲了上下文,你試圖讓它安全的是什麼?插入數據庫,XSS或未經驗證的用戶輸入是否安全? – gmiley

+0

以上全部。 – Cine

+1

那麼只要你使用參數化查詢來執行你的sql命令,任何輸入對於sql注入都是安全的。此時,您只需在數據庫中指定要存儲數據的列是unicode。當您顯示任何內容時,您都希望確保使用HTML編碼過程,這些過程可用於JavaScript以及大多數服務器端腳本語言。 – gmiley

回答

0

如何驗證字符串是否合理,而不是奇怪或不安全?

目前尚不清楚你的「不安全」的意思。正如@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