似乎在Spring 3表单支持对象中使用List
时,它将填充直到表单帖子中传递的索引的条目。如果恶意用户传入索引的大List
值,那么可能会导致非常大的int
和大量对象。
我尝试使用以下类进行表单备份对象的实验:
public class Form
{
private List<String> values = new ArrayList<String>();
public List<String> getValues()
{
return this.values;
}
}
发布以下输入时:
<input type="text" name="form.values[10]" value="HaHa" />
结果List
包含11个条目。前十个是null
,而索引10的条目包含字符串“HaHa”。
想象一下如果发布以下输入会发生什么:
<input type="text" name="form.values[12147483647]" value="HaHa" />
结果List
会占用相当多的内存。
如果它是bean的List
而不是字符串,那似乎更糟糕。 Spring似乎用bean填充列表,而不是null
值。
有没有办法避免这种情况?
我知道我可以使用Map
代替List
,然后使用List
中的条目创建Map
,但还有其他方法吗?
注意:我使用的是Spring 3.1.0。