如何隐藏spring mvc web应用中url字符串中使用的字段值?
例如,如果我想将recordID = 1的记录发送到视图中,我会给用户一个带有以下URL的超链接:
https://myapp.com/urlpattern?recordID=1
正如您所看到的,这不仅暴露了recordID=1
,还诱使恶意用户开始输入其他数字以挖掘其他记录,例如recordID=5
或recordID=9
。
spring框架或spring安全性是否有内置的加密url字符串的方法?或者我是否需要使用hibernate更改底层数据库中的id值?
上述网址格式的控制器代码为:
@RequestMapping(value = "/urlpattern", method = RequestMethod.GET)
public String processUrlPattern(@RequestParam("recordID") String recordId,
HttpServletRequest request, BindingResult result, Map<String, Object> model) {
Long recId = Long.valueOf(recordId).longValue();
RecordObject sel_record = this.appService.findRecordById(recId);
model.put("sel_record", sel_record);
return "foldername/jspname";
}
请注意,应用中的所有实体都从相同的BaseEntity
继承,其生成代码的代码如下:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@DiscriminatorFormula("(CASE WHEN dtype IS NULL THEN 'BaseEntity' ELSE dtype END)")
@org.hibernate.annotations.DiscriminatorOptions(force=true)
public abstract class BaseEntity {
@Transient
private String dtype = this.getClass().getSimpleName();
@Id
@GeneratedValue(strategy=GenerationType.TABLE, generator="TBL_GEN")
@TableGenerator(
name="TBL_GEN",
table="GENERATOR_TABLE",
pkColumnName = "mykey",
valueColumnName = "hi",
pkColumnValue="id",
allocationSize=20
)
protected Integer id;
//other stuff
}
注意:使用Spring安全性对所有用户进行身份验证/授权。但是,数据非常敏感,重要的是没有人能够操纵url字符串。
答案 0 :(得分:1)
使用HDIV,它开箱即用:
http://hdiv.org/hdiv-documentation-single/doc.html
“A6(敏感数据暴露):HDIV为服务器端生成的所有数据提供了机密性。也就是说,HDIV用相对值替换服务器端生成的原始参数值(0,1,2,4,避免将关键数据暴露给客户端。“