java web如何防止html,js注入
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web如何防止html,js注入相关的知识,希望对你有一定的参考价值。
用户可以在填写资料时加入网页标签或<script>标签的脚本,这样会影响整个网站,怎样可以防止html,js注入?
PS:不要单纯的理论,具体怎么操作
在java Web体系中,可以写自定义标签,过滤用户输入,也可以写一个filter过滤器。比如说自定义标签。
开发步骤:
1 写一个标签处理类
2 在/WEB-INF/目录下,写一个*.tld文件,目的是让Web容器知道自定义标签和标签处理类的对应关系
3 在JSP页面中,通过<%@taglib%>指令引用标签库.
4 部署web应用,访问simple.jsp即可
其中,标签处理类可以这样写,转义大于号,小于号等特殊符号。
package cn.itcast.web.jsp.tag;import java.io.IOException;
import java.io.StringWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
//<simple:filter>标签处理类
public class FilterTag extends SimpleTagSupport
public void doTag() throws JspException, IOException
JspFragment jspFragment = this.getJspBody();
StringWriter writer = new StringWriter();
jspFragment.invoke(writer);
String temp = writer.getBuffer().toString();
//结果必定是转义后的字符串
temp = filter(temp);
PageContext pageContext = (PageContext) this.getJspContext();
pageContext.getOut().write(temp);
public String filter(String message)
if (message == null)
return (null);
char content[] = new char[message.length()];
message.getChars(0, message.length(), content, 0);
StringBuffer result = new StringBuffer(content.length + 50);
for (int i = 0; i < content.length; i++)
switch (content[i])
case '<':
result.append("<");
break;
case '>':
result.append(">");
break;
case '&':
result.append("&");
break;
case '"':
result.append(""");
break;
default:
result.append(content[i]);
return (result.toString());
参考技术A 这个问题50分都不够的亲。自己去百度吧
JS转换HTML转义符,防止javascript注入攻击,亲测可用
1
2
3
function
removeHtmlTab(tab) {
return
tab.replace(/<[^<>]+?>/g,
‘‘
);
//删除所有HTML标签
}
1
2
3
function
html2Escape(sHtml) {
return
sHtml.replace(/[<>&
"]/g,function(c){return {‘<‘:‘<‘,‘>‘:‘>‘,‘&‘:‘&‘,‘"
‘:
‘"‘
}[c];});
}
1
2
3
4
function
escape2Html(str) {
var
arrEntities={
‘lt‘
:
‘<‘
,
‘gt‘
:
‘>‘
,
‘nbsp‘
:
‘ ‘
,
‘amp‘
:
‘&‘
,
‘quot‘
:
‘"‘
};
return
str.replace(/&(lt|gt|nbsp|amp|quot);/ig,
function
(all,t){
return
arrEntities[t];});
}
// 转成空格
1
2
3
4
|
function nbsp2Space(str) { var arrEntities = { ‘nbsp‘ : ‘ ‘ }; return str.replace(/&(nbsp);/ig, function (all, t){ return arrEntities[t]}) } |
1
2
3
function
return2Br(str) {
return
str.replace(/\r?\n/g,
"<br />"
);
}
1
2
3
4
5
6
function
trimBr(str) {
str=str.replace(/((\s| )*\r?\n){
3
,}/g,
"\r\n\r\n"
);
//限制最多2次换行
str=str.replace(/^((\s| )*\r?\n)+/g,
‘‘
);
//清除开头换行
str=str.replace(/((\s| )*\r?\n)+$/g,
‘‘
);
//清除结尾换行
return
str;
}
1
2
3
4
function
mergeSpace(str) {
str=str.replace(/(\s| )+/g,
‘ ‘
);
return
str;
}