本帖最后由 mycdsnstudy 于 2012-03-11 13:20:59 编辑

解决方案 »

  1.   

    http://blog.csdn.net/linlzk/article/details/3389919
      

  2.   

    为什么要检验呢?防sql注入,jdbc的preparedStatement就行啦。hibernate的setParameter也可以放注入啊。
    js和html脚本,显示的时候把< > 替换成 &lt;&gt;就行啦,或者用struts1/2标签或jstl标签来显示就行啦。
    <c:out escapeXML="true"/>
    <bean:writer filter="true"/>
    <s:property escape="true"/>
      

  3.   

    Wep application安全方面的框架,你可以看看owasp 的esapi,再結合jdk 的jce,對web前端的各種非法輸入等等都可以做到安全限制。
      

  4.   

    用表单校验插件啊,jquery-easy-ui就不错,可以自己扩展。
    nullCheck: {/* 不允许输入空 */
            validator: function (value, param) {
                return !(/^((A-Za-z\d[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*))$|\s/.test(value));
            },
            message: '请正确输入'
        },
    nameCheck: {
            validator: function (value, param) {
             if(value.substring(0,1)!=" "&&value.substring(value.length-1,value.length)!=" "){
             if(value.length <= 32){
                 return /^[\u3220-\uE76c\uE815-\uFA29\w, %]+$/.test(value);
             }else{
             return false;
             }
             }else{
             return false;
             }
            },
            message: '您的输入不合法'
        },
    ........
    然后在所有你需要校验的地方将key引进来就ok啦
    <td class="widget_td">
    <input type="text" name="userStandbyName" id="userStandbyName"
    class="easyui-validatebox"
    validType="nameCheck" value="${userStandbyName}" msg="用户别名"
    max="13" />
    </td>
      

  5.   

    可以写个过滤器filter吧,把提交的特殊字符转换普通字符
      

  6.   

    我发现,我自己写的和他那个也挺像,不过校验的范围比他那个宽一点,可以校验HTML标签、特殊标点符号、SQL关键字、敏感字符
      

  7.   


    因为是用公司自己的framework,所以集成struts不太可行
      

  8.   


    /**
     * 規範化input,從配置文件中取出的屬性取反,例如:配置如下則執行  this.canonicalize(input,true,true);
     * Encoder.AllowMultipleEncoding=false
       * Encoder.AllowMixedEncoding=false
     * @param input 輸入的字符串
     * @return String
     * */
    public static String canonicalize(String input) {
    return ESAPI.encoder().canonicalize(input);
    }
    /**
     * 規範化input 相當於執行  this.canonicalize(input,strict,strict);
     * @param input 輸入的字符串
     * @param strict 是否需要檢測  多種編碼和混合編碼
     * @return String
     * */
    public static String canonicalize(String input, boolean strict) {
    return ESAPI.encoder().canonicalize(input, strict);
    }
    /**
     * 規範化input 相當於執行  this.canonicalize(input,strict,strict);
     * @param input 輸入的字符串
     * @param restrictMultiple 是否需要檢測多種編碼
     * @param restrictMixed    是否需要檢測混合編碼
     * @return String
     * */
    public static String canonicalize(String input, boolean restrictMultiple, boolean restrictMixed)  {
    return ESAPI.encoder().canonicalize(input, restrictMultiple, restrictMixed);
    }

    /**
     * 將字符串解碼成字節集 (編碼方式為:Base64)
     * @param input 輸入的字符串
     * @return byte[]
     * */
    public static byte[] decodeFromBase64(String input) throws Exception {
    return ESAPI.encoder().decodeFromBase64(input);
    }
    /**
     * 解碼特殊字符為對應的URL實體  
     * @param input 輸入的字符串
     * @return String
     * */
    public static String decodeFromURL(String input) throws Exception {
    return ESAPI.encoder().decodeFromURL(input);
    }
    /**
     * 解碼特殊字符為對應的HTML實體,如  '&lt;'轉換成'<'等  
     * @param input 輸入的字符串
     * @return String
     * */
    public static String decodeForHTML(String input)  {
    return ESAPI.encoder().decodeForHTML(input);
    }

    /**
     * 將字節集轉碼成字符串 (編碼方式為:Base64)
     * @param input 輸入的字節集
     * @param wrap 是否換行
     * @return String
     * */
    public static String encodeForBase64(byte[] input, boolean wrap) {
    return ESAPI.encoder().encodeForBase64(input, wrap);
    }
    /**
     * 將字符串中的URL實體轉換為其對應的字符 
     * @param input 輸入的字符串
     * @return String
     * */
    public static String encodeForURL(String input) throws Exception {
    return ESAPI.encoder().encodeForURL(input);
    }
    /**
     * 將字符串中的HTML實體轉換為其對應的字符,如  '<'轉換成 '&lt;'等 
     * @param input 輸入的字符串
     * @return String
     * */
    public static String encodeForHTML(String input) {
    return ESAPI.encoder().encodeForHTML(input);
    }

    /**
     * Encode data for use in HTML attributes.
     * @param input 輸入的字符串
     * @return String
     * */
    public static String encodeForHTMLAttribute(String input) {
    return ESAPI.encoder().encodeForHTMLAttribute(input);
    }
    /**
     * 將字符串中的CSS實體轉換為其對應的字符 
     * @param input 輸入的字符串
     * @return String
     * */
    public static String encodeForCSS(String input) {
    return ESAPI.encoder().encodeForCSS(input);
    }
    /**
     * 將字符串中的JavaScript實體轉換為其對應的字符 
     * @param input 輸入的字符串
     * @return String
     * */
    public static String encodeForJavaScript(String input) {
    return ESAPI.encoder().encodeForJavaScript(input);
    }
    /**
     * Encode data for use in LDAP queries.
     * @param input 輸入的字符串
     * @return String
     * */
    public static String encodeForLDAP(String input) {
    return ESAPI.encoder().encodeForLDAP(input);
    }
    /**
     * Encode data for use in an LDAP distinguished name.
     * @param input 輸入的字符串
     * @return String 
     * */
    public static String encodeForDN(String input) {
    return ESAPI.encoder().encodeForDN(input);
    }
    /**
     * Encode data for use in an XPath query. 
     * @param input 輸入的字符串
     * @return String
     * */
    public static String encodeForXPath(String input) {
    return ESAPI.encoder().encodeForXPath(input);
    }
    /**
     * Encode data for use in an XML element. 
     * @param input 輸入的字符串
     * @return String
     * */
    public static String encodeForXML(String input) {
    return ESAPI.encoder().encodeForXML(input);
    }
    /**
     * Encode data for use in an XML attribute.
     * @param input 輸入的字符串
     * @return String
     * */
    public static String encodeForXMLAttribute(String input) {
    return ESAPI.encoder().encodeForXMLAttribute(input);
    }
    /**
     * Encode data for insertion inside a data value in a Visual Basic script.
     * @param input 輸入的字符串
     * @return String
     * */
    public static String encodeForVBScript(String input) {
    return ESAPI.encoder().encodeForVBScript(input);
    }
      

  9.   


    那这些特殊,应该允许插入到数据库吧,只是显示的时候,不允许运行js和html吧。。只要把< > replaceAll掉就行啦。。
      

  10.   


    I’m a  man
    这是我写的工具类,封装了ESAPI相关东西