如何最好地清理Java webapp中的输入

我们使用jsp,servlets,bean和mysql数据库。 我们不希望限制用户在表单字段上输入的字符。 那么如何清理输入以及如何确保输出不会因恶意活动而更改。 有没有办法在发送输出时我可以检查是否已经发送了额外的代码。 就像假设有搜索输入字段 – 用户提供的内容类似于alert("I am here") 。 有没有我可以知道这是一个HTML标签。 如果用户在链接字段中附加了一个额外的参数,那么就像之前和之后的检查一样,我可以为文档做一些额外的链接字段。

你真的应该允许用户输入尽可能少的HTML和/或javascript。 validation和消毒这些东西的一个好方法是使用像OWASP AntiSamy这样的现成库。

另外,请查看OWASP Enterprise Security API,了解开发人员构建安全Web应用程序所需的一组安全方法。

您应该始终对从用户输入或可能包含无效字符的数据库等来源获取的数据进行基本的HTML转义。 例如, JSP标记执行此操作。 这样,如果用户在字段中输入"并再次打印它,它将作为"<script> ..."打印到HTML。

jsoup一个帮助你解决这个问题。 无论你做什么,不要试图使用正则表达式或其他东西破解它,因为那样你就会遇到2个问题。 🙂

使用jsoup ,您只需要一小段代码:

 String safe = Jsoup.clean(unsafe, Whitelist.basic()); 

您可以非常轻松地向Whitelist添加标签和属性,但我发现它不支持命名空间标签。