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("&lt;");
                break;
            case '>':
                result.append("&gt;");
                break;
            case '&':
                result.append("&amp;");
                break;
            case '"':
                result.append("&quot;");
                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 {‘<‘:‘&lt;‘,‘>‘:‘&gt;‘,‘&‘:‘&amp;‘,‘"‘:‘&quot;‘}[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];});
}

// &nbsp;转成空格

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|&nbsp;)*\r?\n){3,}/g,"\r\n\r\n");//限制最多2次换行
 str=str.replace(/^((\s|&nbsp;)*\r?\n)+/g,‘‘);//清除开头换行
 str=str.replace(/((\s|&nbsp;)*\r?\n)+$/g,‘‘);//清除结尾换行
 return str;
}

 

1
2
3
4
function mergeSpace(str) {
 str=str.replace(/(\s|&nbsp;)+/g,‘ ‘);
 return str;
}

以上是关于java web如何防止html,js注入的主要内容,如果未能解决你的问题,请参考以下文章

如何防止代码注入攻击在PHP

v-html防止XSS注入

Python如何防止sql注入

ASP.NET如何防止SQL注入

XSS过滤JAVA过滤器filter 防止常见SQL注入

java web 如何防止 用户绕过js验证,直接地址栏提交表单或自己编写html页面,提交数据到服务器?