【项目有关问题】怎么校验表单中的特殊字符
【项目问题】如何校验表单中的特殊字符?
最近,一个项目在做功能测试的过程中遇到一些问题,主要是关于表单中特殊字符的校验,有以下几类:
(1)特殊标点符号:单引号、百分号……
(2)HTML标签:<html>、<table>……
(3)SQL关键字:or、and、<>……
每个表单都单独校验,这样工作量就太大了,路过的大神们,求思路
------解决方案--------------------
http://blog.csdn.net/linlzk/article/details/3389919
------解决方案--------------------
为什么要检验呢?防sql注入,jdbc的preparedStatement就行啦。hibernate的setParameter也可以放注入啊。
js和html脚本,显示的时候把< > 替换成 &lt;&gt;就行啦,或者用struts1/2标签或jstl标签来显示就行啦。
<c:out escapeXML="true"/>
<bean:writer filter="true"/>
<s:property escape="true"/>
------解决方案--------------------
Wep application安全方面的框架,你可以看看owasp 的esapi,再結合jdk 的jce,對web前端的各種非法輸入等等都可以做到安全限制。
------解决方案--------------------
用表单校验插件啊,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>
------解决方案--------------------
用正则表达式做吧!
------解决方案--------------------
可以写个过滤器filter吧,把提交的特殊字符转换普通字符
------解决方案--------------------
最近,一个项目在做功能测试的过程中遇到一些问题,主要是关于表单中特殊字符的校验,有以下几类:
(1)特殊标点符号:单引号、百分号……
(2)HTML标签:<html>、<table>……
(3)SQL关键字:or、and、<>……
每个表单都单独校验,这样工作量就太大了,路过的大神们,求思路
------解决方案--------------------
http://blog.csdn.net/linlzk/article/details/3389919
------解决方案--------------------
为什么要检验呢?防sql注入,jdbc的preparedStatement就行啦。hibernate的setParameter也可以放注入啊。
js和html脚本,显示的时候把< > 替换成 &lt;&gt;就行啦,或者用struts1/2标签或jstl标签来显示就行啦。
<c:out escapeXML="true"/>
<bean:writer filter="true"/>
<s:property escape="true"/>
------解决方案--------------------
Wep application安全方面的框架,你可以看看owasp 的esapi,再結合jdk 的jce,對web前端的各種非法輸入等等都可以做到安全限制。
------解决方案--------------------
用表单校验插件啊,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>
------解决方案--------------------
用正则表达式做吧!
------解决方案--------------------
可以写个过滤器filter吧,把提交的特殊字符转换普通字符
------解决方案--------------------
- Java code
/** * 規範化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實體,如 '<'轉換成'<'等 * @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實體轉換為其對應的字符,如 '<'轉換成 '<'等 * @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); }