如何防止html注入

html-css05

如何防止html注入,第1张

HTML防注入。

一般的html注入都是在字符串中加入了html标签,用下JAVA代码可以去掉这部分代码。

代码如下,自己封装成方法即可。

String msge = "asdasdasdasd <div id=\"f\">asdfsdf"

System.out.println(msge)

msge = msge.replace("&", "&")

msge = msge.replace("<", "<")

msge = msge.replace(" ", " ")

msge = msge.replace(">", ">")

msge = msge.replace("\"", """)

msge = msge.replace("'", "&qpos")

System.out.println(msge)

在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())

    }

}