后台分页的页码安全(超过总页数,页码为非数字)检查问题

桀老板 2014-07-31 11:47:17
DB那边已经能抽到对应page的列表了,但是对page值的安全问题有点困惑:
1.总页数和请求过来的page值的比较(action和service层都是单例,用全局变量定义个pager肯定违反了单例),这样就无法比较请求过来时的page和总页数了<-----我考虑到别人捣乱的情况,直接在地址栏输入过大的page,不知道怎么解决
2.用struts接收参数page,如果请求中的参数被别人在地址栏弄个字符串,struts接收参数,因为类型不是Integer,直接报错


感谢各位大神回答
...全文
344 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Norris_Zhang 2014-07-31
  • 打赏
  • 举报
回复
顶一下一楼的,不知道怎么顶。另外,如果你要精确表示分页,也就是一共有多少页,多查一次数据库肯定是必须的,除非你模糊分页,不说明一共有多少页,这样可以拿一个数去试一下,如果取不到值,就是到尾页了。
剑神一笑 2014-07-31
  • 打赏
  • 举报
回复
1 大于总page page = 最大页码 2 前台或后台校验输入页码 如果不是正整数 页码 = 当前页码
桀老板 2014-07-31
  • 打赏
  • 举报
回复
引用 7 楼 u013112641 的回复:
如果你怕别人从地址栏人为更改 你可以使用ajax 至于你刚才说的“前台显示没问题的,而且有总页数,我问的是,地址栏输入的page值和总page值比较,总page值除了用全局变量保存,用来下一次和page值比较,还可以用什么方式来和page值比较” 你可以吧总页数传到前面 每次下一页的时候进行比较
引用 5 楼 arkwrightzhn 的回复:
引用 4 楼 leifuchild 的回复:
[quote=引用 2 楼 arkwrightzhn 的回复:] 顶一下一楼的,不知道怎么顶。另外,如果你要精确表示分页,也就是一共有多少页,多查一次数据库肯定是必须的,除非你模糊分页,不说明一共有多少页,这样可以拿一个数去试一下,如果取不到值,就是到尾页了。
前台显示没问题的,而且有总页数,我问的是,地址栏输入的page值和总page值比较,总page值除了用全局变量保存,用来下一次和page值比较,还可以用什么方式来和page值比较
因为数据库里总条数,或者说满足某次检索条件的总条数是不断变化的,因此不可能保存全局变量。通常的做法是:接收参数是page和pageSize,即请求第几页,每页多少条,当然,这两个数是不是整数的判断肯定是一开始就判断了的。 然后接下来要做的是:查询数据库,得到总条数totalCount,然后根据totalCount来调整page值,如果page>totalPage,page = totalPage,这里的totalPage是根据总条数和pageSize计算出来的,如果能整除,totalPage = totalCount / pageSize,如果不能整除,totalPage = totalCount / pageSize + 1; 然后再用调整后的page和pageSize再次检索数据库,得到想要的结果集。[/quote] 嗯,这流程我以前玩过,看来还得每次查totalPages来比较新传进来的page值,打算用struts拦截器禁止地址栏编辑内容来解决胡乱输入页码的问题,谢谢啦
Zhang_qiankun 2014-07-31
  • 打赏
  • 举报
回复
如果你怕别人从地址栏人为更改 你可以使用ajax 至于你刚才说的“前台显示没问题的,而且有总页数,我问的是,地址栏输入的page值和总page值比较,总page值除了用全局变量保存,用来下一次和page值比较,还可以用什么方式来和page值比较” 你可以吧总页数传到前面 每次下一页的时候进行比较
Zhang_qiankun 2014-07-31
  • 打赏
  • 举报
回复
你考虑的很周全 前台传过来的page 在后台可以进行解析 如果在字符串或者什么的 就直接抛出异常或者指定到第一页 如果page值过大 就取最后一页
Norris_Zhang 2014-07-31
  • 打赏
  • 举报
回复
引用 4 楼 leifuchild 的回复:
引用 2 楼 arkwrightzhn 的回复:
顶一下一楼的,不知道怎么顶。另外,如果你要精确表示分页,也就是一共有多少页,多查一次数据库肯定是必须的,除非你模糊分页,不说明一共有多少页,这样可以拿一个数去试一下,如果取不到值,就是到尾页了。
前台显示没问题的,而且有总页数,我问的是,地址栏输入的page值和总page值比较,总page值除了用全局变量保存,用来下一次和page值比较,还可以用什么方式来和page值比较
因为数据库里总条数,或者说满足某次检索条件的总条数是不断变化的,因此不可能保存全局变量。通常的做法是:接收参数是page和pageSize,即请求第几页,每页多少条,当然,这两个数是不是整数的判断肯定是一开始就判断了的。 然后接下来要做的是:查询数据库,得到总条数totalCount,然后根据totalCount来调整page值,如果page>totalPage,page = totalPage,这里的totalPage是根据总条数和pageSize计算出来的,如果能整除,totalPage = totalCount / pageSize,如果不能整除,totalPage = totalCount / pageSize + 1; 然后再用调整后的page和pageSize再次检索数据库,得到想要的结果集。
桀老板 2014-07-31
  • 打赏
  • 举报
回复
引用 2 楼 arkwrightzhn 的回复:
顶一下一楼的,不知道怎么顶。另外,如果你要精确表示分页,也就是一共有多少页,多查一次数据库肯定是必须的,除非你模糊分页,不说明一共有多少页,这样可以拿一个数去试一下,如果取不到值,就是到尾页了。
前台显示没问题的,而且有总页数,我问的是,地址栏输入的page值和总page值比较,总page值除了用全局变量保存,用来下一次和page值比较,还可以用什么方式来和page值比较
桀老板 2014-07-31
  • 打赏
  • 举报
回复
引用 1 楼 cbxjj 的回复:
1 大于总page page = 最大页码 2 前台或后台校验输入页码 如果不是正整数 页码 = 当前页码
哥么你这处理方式我也知道,总page你怎么拿?每次都去查? 我指的是地址栏里后面跟上不规范的页码值,比如?page="aa",等你后台获取page值,已经报错了,因为我setPage参数设的是Intger而不是String

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧