1

我想知道......我们都知道,我们应该在后端验证用户输入,即使我们在前端验证它。换句话说 - 前端验证只是为了可用性,后端验证是为了质量和安全。

假设我的网页上有一个输入字段,用户可以编写一些文本。攻击者是否有可能输入如此长的文本,以至于它不适合在后端保存文本的变量?到目前为止,我所看到的只是确保字符串适合数据库字段。

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

但是如果用户文本很长,那么长String txt就太小了,我的程序不会在第一行崩溃吗?

我希望这不会是关于 aString可能有多长的讨论。如果我们可以在没有堆大小和虚拟内存的情况下做到这一点,那就太好了;)

4

1 回答 1

0

但是如果用户文本很长,那么长到 String txt 太小,我的程序不会在第一行崩溃吗?

答案是否定的:String 对象的大小没有真正的限制。

但要考虑到以下问题:UTF-8 字符。

当数据库字段大小以 VARCHAR2 类型(这是一个示例)的 BYTES(而不是字符,这是我的默认设置)表示并且您插入占用超过一个字节的 UTF-8 字符时,我遇到了问题。

例子:

数据库字段 = VARCHAR2 (50)

验证:字符串长度 <= 50

字符串 €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€具有小于50 个字符但超过 50 个字节。

spring 验证认为它已通过(长度小于 50)但 DB insert 语句抛出异常......

于 2013-01-17T15:08:09.380 回答