我打算开发一个JSP论坛,如何防止用户通过贴图提权?
用户发个贴子,贴图的图片地址类似:/Admin/Modify.jsp?action=Update&ID=2&Rule=1
假设我已经登录或后台,然后进入论坛看帖,这样岂不会将用户ID为2的用户权限提升到1(管理员)?好坑吧?
如果是asp的话,用Request.Form("Rule")的方式取值,就不会出现这样的安全问题。
jsp的request.getParameter不区分GET和POST,算个重大的安全漏洞把?
jsp也有类似asp的request.form方法吗?
------最佳解决方案--------------------
1.用servlet 可以区分doGet和doPost
2.给用户会话cookie一个加密的ticket,加拦截器检查该ticket,来防止有人进入管理员的界面。
3.允许网络图片可能会消耗别人网站的流量,不太好。
4.建议图片全部用静态的方式存储。再申请个处理图片的域名,用apache这种http服务器返回图片
------其他解决方案--------------------
Java做的东西没有那么高度集成化的,所以开发起来累点,但是,也保证了你不可能知道这些东西,完毕。
一个简单的字符串过滤器,把所有可能的非法请求封掉就完事
------其他解决方案--------------------
真心不懂~!有GET请求为什么就会更新数据库呢??不做update他怎么会成为管理员呢???真心不懂
------其他解决方案--------------------最简单的方式就是 :禁止网络图片,只能使用 内部默认图片和 用户上传后的图片...
要使用网络图片的话 就对 用户输入 的 图片地址 做下过滤就好..不是以jpg、gif等图片格式结尾的 全部屏掉
------其他解决方案--------------------改POST,生成一个密钥每次提交的时候检查
------其他解决方案--------------------你给帖子发的图不设链接地址,不加点击事件,怎么就会跳转到图片的地址去呢?
------其他解决方案--------------------而且,就算你要给图片加上外链地址,那你先给个提醒对话框提示可能存在的风险,然后看操作者自己的决定就好了,这样也算解决了吧
------其他解决方案--------------------这问题是没法处理吗?
------其他解决方案--------------------这玩意你不能存在服务器端内存里么?为什么要用户提供他自己的角色信息?
------其他解决方案--------------------登录的时候就在后台先确定权限的问题。数据库中要有对应的表。
------其他解决方案--------------------使用过滤器。我最近也做了下论坛的。感觉 过滤 器还是挺好用的 filter
------其他解决方案--------------------原来asp为了解决CV程序员连个控制字符过滤器都写不出来的具体问题,做了这么多工作。
难怪越来越惨淡,编程语言靠的是程序员的水平,不是拖空间,调现成方法的水平。
------其他解决方案--------------------如果贴图片 图片一般以IMG方式结尾 怎么会以ACTION效验的时候应该就不能通过
------其他解决方案--------------------
其实不懂你在说什么~!
------其他解决方案--------------------真不懂你在说啥
------其他解决方案--------------------我的意思是,假设某开放的jsp论坛,大家都知道管理后台编辑用户资料的地址,也知道需要提交哪些字段,例如用户ID(hidID),用户权限(rdoRole)等等。
然后,有不良用户注册进入论坛发帖,帖子内容为一贴图,贴图地址为后台修改用户资料的地址,然后附上将用户权限设置为管理员的参数。
这时候,管理员从后台回论坛看帖来了,不幸访问了这贴子,看到了这个无法打开的图片,
然后,你懂的,对方神奇的变管理员了~!
各位看官,看明白了吗?
------其他解决方案--------------------浏览器显示图片的时候,会自动向服务器发动一次GET请求,下载图片数据,无需手工点击。当然,这里不能下载到真正的图片数据,因此图片是无法正常显示的。
------其他解决方案--------------------发起GET请求之后,服务器根据GET里的参数进行操作,如果参数中有更新用户资料的命令,并且所有参数都完整合法,当然会执行update。
------其他解决方案--------------------问题就是jsp如何识别GET和POST的数据?
例如
http.open("POST", "?ID=1", false);