2013-01-17 31 views
1

我在想...... 我們都知道,即​​使我們在前端驗證它,我們也應該驗證後端的用戶輸入。換句話說 - 前端驗證只是爲了可用性,後端驗證是爲了質量和安全性。輸入驗證 - 一般主題

比方說,我在我的網頁上有一個輸入字段,用戶可以寫一些文本。攻擊者是否有可能輸入這樣一個長文本,使其不適合保存後端文本的變量?到目前爲止,我所看到的只是確保一個字符串適合數據庫字段。

String txt = getParameter("usertext"); 
assert(txt.length() < 201); 
// the field in the database: 
// user_text varchar(200), 

但是,如果用戶文本veeery長,這麼長時間,String txt會太小,在第一行會不是我的程序崩潰?

我希望這不會是一個String多長時間的討論。如果我們能做到這一點W/O堆大小和虛擬內存會很大;)

回答

0

但是,如果用戶文本veeery長,所以只要該字符串的txt是太小了,不是我的程序崩潰在第一行?

答案是否定的:對String對象的大小沒有實際限制。

但考慮到以下問題:UTF-8字符。

我在使用VARCHAR2類型(這是一個示例)以BYTES(而不是字符,這是我的情況下的默認值)表示數據庫字段大小時遇到​​了問題,並且您插入的UTF-8字符需要超過一個字節。

實施例:

數據庫字段= VARCHAR2(50)

驗證:字符串長度< = 50

字符串€€€€€€€€€€€€€€€€總價值低於50個字符,但多於50個字節。

彈簧驗證其視爲通過(長度小於50),但DB insert語句引發的異常...

+0

每個人的性格,甚至2個字節在Java中 – user1414745

+0

是€不是一個UTF-16字符?如果是這樣,那麼測試真的很好:) – user1414745

+0

我不知道它是UTF-8還是16,但是在Oracle中它佔用了多個字節,這是問題所在。在Java中,即使字符需要2個字節,長度方法也不會考慮這一點。 – ioan