Spring Form Tag - 安全问题

时间:2015-11-20 17:40:38

标签: hibernate security spring-mvc

我不太确定在Hibernate中使用Spring MVC表单标记:

create table person (
    phone_number varchar(20),
    country_id int
)

因为如果你有一个具有以下结构的表:

public class Person (
    String phoneNumber;
    Integer countryId;

    // setters and getters
)

然后hibernate会将它映射到这样的类:

<form:form method="POST" action="controller_path" modelAttribute="person">
    <form:input type="text" path="phoneNumber"/>
    <form:input type="text" path="countryId"/>
</form:form>

在春季jsp形式中,我们有:

<form method="POST" action="controller_path">
    <input type="text" id="phoneNumber" name="phoneNumber">
    <input type="text" id="countryId" name="countryId">
</form>

将生成以下html:

{{1}}

生成的html是否完全显示Person类的字段名称并不是不安全的,因为最终我认为有人可以猜出表的列名?

有没有办法防止这种情况发生?或者不用担心什么?

1 个答案:

答案 0 :(得分:2)

如果您遵循Spring的完整MVC设置并使用hibernate / JPA /另一个ORM来检查参数的内容(有效地转义字符串/文本对象中的数据),以及是否在您插入数据的情况下你自己使用参数化语句,应该没问题。

编码建议存在巨大的矛盾:

1)不要显示与您在数据库中使用的参数名称相等的参数名称

2)和REST:拥有与列定义相同名称的对象

由于人类在稍后查询数据库时喜欢某些可识别的列名,因此第二种建议似乎会被更多地使用。

(my)结论:假设您使用参数化语句,并检查要更新的对象的所有权,则不应该出现问题。