【问题标题】:obscuring url strings in spring mvc在spring mvc中隐藏url字符串
【发布时间】:2015-03-11 20:26:32
【问题描述】:

如何在 spring mvc web 应用程序中隐藏 url 字符串中使用的字段值?

例如,如果我想将 recordID=1 的记录发送到视图中,我给用户一个带有以下 url 的超链接:

https://myapp.com/urlpattern?recordID=1  

如您所见,这不仅暴露了recordID=1,还诱使恶意用户开始输入其他数字来挖掘其他记录,例如recordID=5recordID=9

spring框架或spring security是否有内置的url字符串加密方式?还是我需要使用hibernate更改底层数据库中的id值?

上述url模式的控制器代码是:

@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,其 id 生成代码如下:

@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 字符串。

【问题讨论】:

  • 用户是否使用 Spring Security 进行身份验证/授权?
  • @Mark 是的,用户都使用 Spring Security 进行了身份验证/授权。
  • 用户是否只能访问特定的 ID?
  • 是的,但得出的结论是,无论使用何种技术,这都不是真正的安全措施。您可能最好在 spring security 中查看 ACL 以获得适当的解决方案
  • 如果您注意到的话,我没有将您的问题标记为重复。只是做了一个提示,试图对混淆 url 参数的真实概念给出一些指导。剩下的就是实现细节。有些做法的寿命超过 4 年。

标签: spring spring-mvc spring-security


【解决方案1】:

使用 HDIV,它开箱即用:

http://hdiv.org/hdiv-documentation-single/doc.html

"A6(敏感数据暴露):HDIV 为服务器端生成的所有数据提供机密属性。也就是说,HDIV 将服务器端生成的原始参数值替换为相对值(0,1,2,4,等)避免将关键数据暴露给客户端。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2013-02-16
    相关资源
    最近更新 更多