String 输入验证-一般主题

String 输入验证-一般主题,string,validation,String,Validation,我在想。。。 我们都知道,我们应该在后端验证用户输入,即使我们在前端验证。换句话说,前端验证只是为了可用性,后端验证是为了质量和安全性 假设我的网页上有一个输入字段,用户可以编写一些文本。攻击者是否有可能输入如此长的文本,以致无法放入后端保存文本的变量中?到目前为止,我所看到的只是确保一个字符串适合数据库字段 String txt = getParameter("usertext"); assert(txt.length() < 201); // the field in the data

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

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

String txt = getParameter("usertext");
assert(txt.length() < 201);
// the field in the database: 
// user_text varchar(200),
但是如果用户文本非常长,那么字符串txt就会太小,我的程序不会在第一行崩溃吗

我希望这不会是一个关于字符串长度的讨论。如果我们能做到这一点,没有堆大小和虚拟内存,这将是伟大的

但是如果用户文本非常长,那么字符串txt就会太小,我的程序不会在第一行崩溃吗

答案是否定的:字符串对象的大小没有实际限制

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

当数据库字段大小以字节而不是字符表示时,我遇到了一个问题,这是我的VARCHAR2类型的默认值。这是一个示例,您插入了占用多个字节的UTF-8字符

例如:

数据库字段=VARCHAR2 50


验证:字符串长度-每个字符在Java中为2字节-不是UTF-16字符吗?如果是这样的话,它真的很适合测试:我不知道它是UTF-8还是16,但在Oracle中它需要超过一个字节,这就是问题所在。在java中,即使字符占用2个字节,length方法也不考虑这一点。