例如:
<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安全取值的方法?
<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安全取值的方法?
但我觉得JSP如果没有GET和POST的取值区分方法,本身是一个很大的安全漏洞。
解决的方法好多了。比如hidden表单就是很简单的了
1.一般jsp作为显示层是要和逻辑层分开的,处理逻辑你可以用servlet servlet里有doGet doPost方法
2.用session来标记用户才是比较好的办法。你现在这种做法,就算是用post,黑客只要写个程序发个post方法的http请求,你就悲剧了
===========================================
以你现在设计的情况,我想知道黑客模拟post怎么就难于通过身份认证了
建议看看Struts和Servlet的教程,然后再来讨论这个问题
jsp要被编译成servlet,是放到service方法里面的,因此,jsp本身是不区分get还是post的。
如果想要严格控制是get还是post,需要用servlet。现在流行的SpringMVC之类的框架都是提供@Get,@Post之类的注解,这样就一目了然了。
String query = request.getQueryString();
boolean flag = query.contains("Rule=");
if (flag) {
//怀疑是黑客行为,用日志记录
}
else {
request.getParameter("Rule");
}其中
request.getQueryString();
是用来获得http url 中问号后面的部分