在一个jsp页面上面,用request.getParameter(username)来获取URL上面传过来的值。因为现在在做一个安全性方面的工作,在url上面输入https://localhost/default.jsp?username=ini%00.htm的时候,request.getParameter方法会自动把%00转换成 ^@,我已经尝试用replace的方法把%,@,' 之类的字符替换掉,可是似乎不行。 请问你们碰到过这样的问题吗,该如何解决?
调试欢乐多
似乎不行指,我已经使用了replace()的方法,把queryString替换掉,但是查看log还是存在^@。
谢谢你的提议,post方法是一下一步的的做法。但是发觉系统就算了用了post的方法,如果黑客要在url上面注入攻击的话,还是有这样的问题。
你是指传进来的request就加密吗?然后再解密吗?
但是问题是我得到的request已经是含有^@这样子字符了。
如果是为了防止注入攻击,过滤器就可以了。过滤关键字 update delete等等。
https://localhost/dispatcher.jsp?kundennummer=ini%00.htm&benutzername=test
我尝试用下面的方法把特殊字符替换
request.getParameter("kundennummer").replaceAll("/", "c").replaceAll("%", "d").replaceAll("@", "e").replaceAll("^", "f");
得到的kundennummer的结果:
fini^@.htm
a.jsp<a href="b.jsp?kundennummer=ini%00.htm&benutzername=test">aaaaaaa</a>b.jsp<%
String bb=request.getParameter("kundennummer");
String aa=request.getParameter("kundennummer").replaceAll("/", "c").replaceAll("%", "d").replaceAll("@", "e").replaceAll("^", "f");
%>
<%=bb %>
<%=aa %>
结果
ini.htm
fini.htm
我换别的试试
比如select可以编码为selec%74(即将t转换为url编码),这样就可以实现注入了!
这样的编码。
我调用远程的server看的,server是Linux的!会不会是这个原因?
在Filter过滤的时候写一个转码方法即可。所有值经过转码在进行过滤。
java.net.URLDecoder.decode(value,"GBK");
我试过了,在我的server还是一样,显示的是^@,哎!
1:加密,解密,也就是urlencode urldecode2:服务器端转码,当然前提是前面传过来的东西未过滤