在一个jsp页面上面,用request.getParameter(username)来获取URL上面传过来的值。因为现在在做一个安全性方面的工作,在url上面输入https://localhost/default.jsp?username=ini%00.htm的时候,request.getParameter方法会自动把%00转换成 ^@,我已经尝试用replace的方法把%,@,' 之类的字符替换掉,可是似乎不行。 请问你们碰到过这样的问题吗,该如何解决?

解决方案 »

  1.   

    @Johnson_Hong, 
    似乎不行指,我已经使用了replace()的方法,把queryString替换掉,但是查看log还是存在^@。
      

  2.   

    @firemoo,
    谢谢你的提议,post方法是一下一步的的做法。但是发觉系统就算了用了post的方法,如果黑客要在url上面注入攻击的话,还是有这样的问题。
      

  3.   

    @文心雕艳,
    你是指传进来的request就加密吗?然后再解密吗?
    但是问题是我得到的request已经是含有^@这样子字符了。
      

  4.   

    页面链接? 不明白你这里参数为什么要采用带符号形式。
    如果是为了防止注入攻击,过滤器就可以了。过滤关键字 update delete等等。
      

  5.   

    @文心雕艳, 
    https://localhost/dispatcher.jsp?kundennummer=ini%00.htm&benutzername=test
    我尝试用下面的方法把特殊字符替换
    request.getParameter("kundennummer").replaceAll("/", "c").replaceAll("%", "d").replaceAll("@", "e").replaceAll("^", "f");
    得到的kundennummer的结果:
    fini^@.htm
      

  6.   

    我这样做的
    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
      

  7.   

    是不是和你们用的HTTPS协议有关呢。。页面编码我用的GB2312
    我换别的试试
      

  8.   

    可以绕过简单的判断过滤
    比如select可以编码为selec%74(即将t转换为url编码),这样就可以实现注入了!
      

  9.   

    我查了一下所有的jsp,没有类似<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
    这样的编码。
      

  10.   


    我调用远程的server看的,server是Linux的!会不会是这个原因?
      

  11.   


    在Filter过滤的时候写一个转码方法即可。所有值经过转码在进行过滤。
    java.net.URLDecoder.decode(value,"GBK");
      

  12.   


    我试过了,在我的server还是一样,显示的是^@,哎!
      

  13.   

    有两种方法解决
    1:加密,解密,也就是urlencode urldecode2:服务器端转码,当然前提是前面传过来的东西未过滤
      

  14.   

    问题解决了,java.net.URLEncoder.encode().