如何清理输入数据

12

当用户在Tomcat Webapp中提交表单时,我愿意使用"OWASP ESAPI for Java"来清理用户的输入。

过去我使用org.apache.commons.lang.StringEscapeUtils进行如下处理:

public static String myEscapeHtml(String s)
{
    String s_escapedString = null;       
    s_escapedString = StringEscapeUtils.escapeHtml(s);
    return s_escapedString;
}

我已经不确定这样是否足以“合理”地保护Web应用程序了...

我想知道应编写哪些代码来使用OWASP ESAPI对Tomcat Web应用程序用户输入进行清理。

您能否给出一个例子,其中一个或多个ESAPI“过滤器”(转义?编码?...)将应用于字符串以对其进行清理?

后端RDBMS是PostgreSQL。

Tomcat服务器可以在Linux服务器或Windows服务器上运行。

谢谢,祝好。


我的原始标题是“如何使用Owasp Esapi for Java对输入进行消毒”。我认为在主题的标题中指明我想使用的库和编程语言是值得的。但是根据您的标准,或许标签已经足够使主题得到正确的引用... 我希望能得到答案 :) - Léa Massiot
你对输入编码或输出编码感兴趣吗? - avgvstvs
我不确定。我会说“输出编码”以避免在HTML代码中注入。 - Léa Massiot
2个回答

9

对于输入验证,您将使用org.owasp.esapi.reference.DefaultValidator

如果您想在validation.properties中定义自己的验证规则,可以参考此问题的答案进行操作。

对于输出转义,实际上非常简单。最好在将数据插入到将发送到表示层的对象时,您需要使用String output = ESAPI.encoder().escapeForHTML(String s);方法。

完整的方法列表定义在org.owasp.esapi.Encoder中。


0

源代码

这将对HTML输入进行清理,并确保引号得以保留。

final StringBuilder sb = new StringBuilder();
HtmlSanitizer.Policy policy = myPolicyBuilder.build(new HtmlStreamEventReceiver() {
    public void openDocument() {}
    public void closeDocument() {}
    public void openTag(String elementName, List<String> attribs) {
        if ("br".equals(elementName)) { sb.append('\n'); }
    }
    public void closeTag(String elementName) {}
    public void text(String text) { sb.append(text); }
});
HtmlSanitizer.sanitize(myHtml, policy);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接