如何清理输入

Posted

技术标签:

【中文标题】如何清理输入【英文标题】:Howto sanitize inputs 【发布时间】:2014-08-12 18:33:41 【问题描述】:

当用户在 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 webapp 用户输入。

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

后端RDBMS是PostgreSQL。

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

谢谢你和最好的问候。

【问题讨论】:

我原来的标题是“如何使用 Owasp Esapi for Java 清理输入”。我认为值得在线程标题中精确说明我想使用的库和编程语言。但也许,根据你的标准,标签足以让线程被正确引用......我希望我能得到答案:) 您对输入编码还是输出编码感兴趣? 我不确定。我会说“输出编码”以避免在 HTML 代码中注入... 【参考方案1】:

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

如果您想在validation.properties 中定义您自己的验证规则,那么可以在this question 的回答中演示这样做的技术。

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

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

【讨论】:

以上是关于如何清理输入的主要内容,如果未能解决你的问题,请参考以下文章

如何清理 sql.js 输入?

如何使用来自 AngularJS 控制器的无效输入正确清理表单?

如何在邮件发送前清理 PHP 中的用户输入?

清理Angular2中的输入[重复]

清理用户输入

出于安全目的,在 bash 中清理用户输入