JSP如何对GET和POST分别取值?

Rimifon 2012-11-21 11:53:39
例如:
<form action="?UserID=1" method="POST">
权限设置:
<select name="Rule">
<option value="1">管理员</option>
<option value="2" selected="selected">普通用户</option>
</select>
<input type="submit" value="修改" />
</form>
ASP可以通过Request.Form("Rule")来限制仅取Form中值,这样就不会造成安全问题。但是jsp的request.getParameter("Rule")是不区分GET和POST的,这就造成了一个很大的安全问题了:只要访问.....jsp?UserID=1&Rule=1这样的网址,就能直接将用户设置为管理员。

假设我是管理员,从后台进入论坛,遇到一张图片,地址为.......jsp?UserID=10&Rule=1,那UserID为10的用户岂不会直接被设置成管理员了吗?

难道JSP会这么不安全?有没有GET和 POST安全取值的方法?
...全文
747 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
码农下的天桥 2013-04-28
  • 打赏
  • 举报
回复
赞同lz从底层分析,我也遇到这个问题,看来也是需要自己或者从其他开源项目找答案了。
Rimifon 2012-12-03
  • 打赏
  • 举报
回复
还是自己写程序,分析request.getInputStream()或request.getReader(),这样会比较安全!
老猿的书房 2012-11-22
  • 打赏
  • 举报
回复
JSP本来就不是单独使用的。 建议看看Struts和Servlet的教程,然后再来讨论这个问题
General-M 2012-11-22
  • 打赏
  • 举报
回复
ServletActionContext.getRequest().getMethod();判断get,post
zhangchao19890805 2012-11-22
  • 打赏
  • 举报
回复
想到了一种好办法


String query = request.getQueryString();
boolean flag = query.contains("Rule=");
if (flag) {
    //怀疑是黑客行为,用日志记录
}
else {
   request.getParameter("Rule");
}
其中 request.getQueryString(); 是用来获得http url 中问号后面的部分
若鱼1919 2012-11-22
  • 打赏
  • 举报
回复
jsp要被编译成servlet,是放到service方法里面的,因此,jsp本身是不区分get还是post的。 如果想要严格控制是get还是post,需要用servlet。 现在流行的SpringMVC之类的框架都是提供@Get,@Post之类的注解,这样就一目了然了。
suibian992 2012-11-22
  • 打赏
  • 举报
回复
一般像权限这种东西最好不要明码出现,要不用hidden表单提交,要不就用session进行获取,这样比较安全
Rimifon 2012-11-22
  • 打赏
  • 举报
回复
有人说可以通过servlet的doGet和doPost来处理。但实际上,不管doGet和doPost,都是采用request.getParameter来获取参数值,因此,doPost也就相当于加了一个判断,REQUST_METHOD是否为POST而已。实际上,request.getPrameter("ID"),你仍然看不出这个ID是存在URL中,还是post的body中。
引用 11 楼 FishOfThink 的回复:
JSP本来就不是单独使用的。 建议看看Struts和Servlet的教程,然后再来讨论这个问题
Rimifon 2012-11-22
  • 打赏
  • 举报
回复
黑客如果需要提权,首先就需要有管理员权限才能够成功更改用户权限。如果采用POST攻击,这个攻击怎么让网站管理员去触发就是一个大难题,而GET攻击很简单,只需要在论坛帖张图片,管理员不小心打开帖子,提权就完成了。
引用 8 楼 zhangchao19890805 的回复:
引用 7 楼 Rimifon 的回复:但是被黑的几率大大降低了。至少不会出现看帖子的时候无缘无故把别人提权了得问题。至于黑客模拟的POST,很难通过身份认证了。 引用 6 楼 zhangchao19890805 的回复: 引用 3 楼 Rimifon 的回复:那么说,JSP很不安全了。 我倒是不想用GET来传送数据,但是有用户恶意从URL传递表单值我也没办法……
hepeng_8 2012-11-21
  • 打赏
  • 举报
回复
yongpost 可以在form里面设置隐藏域 用作你的传值
Rimifon 2012-11-21
  • 打赏
  • 举报
回复
那么说,JSP很不安全了。 我倒是不想用GET来传送数据,但是有用户恶意从URL传递表单值我也没办法。
偶是江湖中人 2012-11-21
  • 打赏
  • 举报
回复
存在你说的这种漏洞,但是最好还是不要用get方法来传送数据了。 解决的方法好多了。比如hidden表单就是很简单的了
Rimifon 2012-11-21
  • 打赏
  • 举报
回复
根据REQUEST_METHOD来确定是否有POST操作?这倒是个安全补救措施。 但我觉得JSP如果没有GET和POST的取值区分方法,本身是一个很大的安全漏洞。
hkzhc 2012-11-21
  • 打赏
  • 举报
回复
建立一个拦截器,获取提交的request的 METHOD,根据这个值与传入的权限标示进行判断,不合要求直接返回错误提示
zhangchao19890805 2012-11-21
  • 打赏
  • 举报
回复
引用 7 楼 Rimifon 的回复:
但是被黑的几率大大降低了。至少不会出现看帖子的时候无缘无故把别人提权了得问题。至于黑客模拟的POST,很难通过身份认证了。 引用 6 楼 zhangchao19890805 的回复: 引用 3 楼 Rimifon 的回复:那么说,JSP很不安全了。 我倒是不想用GET来传送数据,但是有用户恶意从URL传递表单值我也没办法。 1.一般jsp作为显示层是要和逻辑层分开的,处理逻辑你……
至于黑客模拟的POST,很难通过身份认证了。 =========================================== 以你现在设计的情况,我想知道黑客模拟post怎么就难于通过身份认证了
Rimifon 2012-11-21
  • 打赏
  • 举报
回复
但是被黑的几率大大降低了。至少不会出现看帖子的时候无缘无故把别人提权了得问题。至于黑客模拟的POST,很难通过身份认证了。
引用 6 楼 zhangchao19890805 的回复:
引用 3 楼 Rimifon 的回复:那么说,JSP很不安全了。 我倒是不想用GET来传送数据,但是有用户恶意从URL传递表单值我也没办法。 1.一般jsp作为显示层是要和逻辑层分开的,处理逻辑你可以用servlet servlet里有doGet doPost方法 2.用session来标记用户才是比较好的办法。你现在这种做法,就算是用post,黑客只要写……
zhangchao19890805 2012-11-21
  • 打赏
  • 举报
回复
引用 3 楼 Rimifon 的回复:
那么说,JSP很不安全了。 我倒是不想用GET来传送数据,但是有用户恶意从URL传递表单值我也没办法。
1.一般jsp作为显示层是要和逻辑层分开的,处理逻辑你可以用servlet servlet里有doGet doPost方法 2.用session来标记用户才是比较好的办法。你现在这种做法,就算是用post,黑客只要写个程序发个post方法的http请求,你就悲剧了
我是笑嘻嘻 2012-11-21
  • 打赏
  • 举报
回复
一般都用POST

81,091

社区成员

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

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