JFinal如何验证参数是否合法(是否被恶意篡改)
如题,我想实现的效果是,get请求传参,无视用户篡改参数,比如合法的url为/controller/method?id=123&city=456(第一次请求),controller会render到正确的页面,当用户篡改参数后,拦截器会无视当前无效的参数,直接携带上次请求中正确的参数并重定向至当前请求的方法(返回上次正确参数render的页面)。
我的思路:
写一个全局的拦截器,拿当前的actionKey做为cookie的key从cookie中获取参数,如果取不到,证明为第一次请求。并将请求参数放入cookie。如果取到,并且当前请求的参数与cooike中的参数不等,则视为参数被篡改,直接拿正确的参数重定向至当前请求的方法。
存在的问题:
该拦截器会拦截正常的请求,比如:
/controller/method?id=123&city=456 未篡改,正常的请求。
/controller/method?id=789&city=10 未篡改,正常的请求。
那以我上述逻辑,用户正常访问某一方法的第2次时(参数不一样,但参数是合法的。),拦截器依然会将此视为非法请求。
请大家帮我想想解决方案,谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
在参数里面再加一个签名(例如TIMESTAMP之类)呗,但这样对性能有一些影响,看你的应用需要了
引用来自“JFinal”的评论
url 上面传参,是很容易被修改的,如果非得要让 url 上被改过的参数不生效,而在 url 参数被篡改后使用别的方式保障参数的正确性,建议参数放在 post 请求体内,并且使用 https 连接确保安全。理论上来说,只要是 http 都很容易被拦截和篡改,尤其是 session 劫持攻击,攻击者拦截到你的 session id 后,可以接管合法用户的请求成为授权用户。
url 上面传参,是很容易被修改的,如果非得要让 url 上被改过的参数不生效,而在 url 参数被篡改后使用别的方式保障参数的正确性,建议参数放在 post 请求体内,并且使用 https 连接确保安全。理论上来说,只要是 http 都很容易被拦截和篡改,尤其是 session 劫持攻击,攻击者拦截到你的 session id 后,可以接管合法用户的请求成为授权用户。
@JFinal波总,求指点!!
大家可以一起来探讨啊,非常感谢。
引用来自“JFinal”的评论
url 上面传参,是很容易被修改的,如果非得要让 url 上被改过的参数不生效,而在 url 参数被篡改后使用别的方式保障参数的正确性,建议参数放在 post 请求体内,并且使用 https 连接确保安全。理论上来说,只要是 http 都很容易被拦截和篡改,尤其是 session 劫持攻击,攻击者拦截到你的 session id 后,可以接管合法用户的请求成为授权用户。