用Appscan扫描java web应用,扫描出有sql盲注,
我用的是建了个测试工程,只有一个jsp页面,页面上只有两个参数可提交title和desc
Appscan扫出了一个sql盲注,3个变体:
下面是它生成的攻击参数
title=1234&desc=1234+and+7659%3D7659
title=test&desc=1234%2F**%2Fand%2F**%2F7659%3D7659
title=test&desc=1234%27+and+%27foobar%27%3D%27foobar%27%29+--该怎么过滤呢,我把%27replaceAll成',+ replaceAll成+,可是它还是能检测出sql盲注来。

解决方案 »

  1.   

    实在不行,对参数进行base64编码,然后再到server端进行解码,绝对不会检测出盲注了。
      

  2.   

    这样啊,在哪编码呢,我是用filter过滤,这样会不会对性能造成影响啊
      

  3.   

    使用以下2个方法即可:
    public static String encodeBase64(String s) {
    if (s == null)
    return null;
    return (new sun.misc.BASE64Encoder()).encode(s.getBytes());
    }
    /**
     * 将base64编码的字符还原
     * 
     * @param s
     * @return
     */
    public static String decodeBase64(String base64str) {
    if (base64str == null)
    return null;
    sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
    try {
    byte[] b = decoder.decodeBuffer(base64str);
    return new String(b);
    } catch (Exception e) {
    return null;
    }
    }
      

  4.   

    我用的是filter,在chain.doFilter(req, resp);前编码吗?
    解码在哪啊,有没有公共的地方,如果要在每个接受参数的地方单独解码那好麻烦啊。
      

  5.   

    改代码,拼sql的地方采用PreparedStatement来做,从根源上解决问题。