Java Regex,不到和超过签名

时间:2011-04-13 03:16:53

标签: java regex jsp

我有一个用户可以在互联网上输入的字符串,目前它没有受到XSS攻击的保护。我希望能够替换<和>符号。通常称为“小于”,“超过”,“尖括号”等。

我确信这已被问了一百万次,但我找不到简单的答案。我认为正则表达式是前进的方向,但无法弄清楚如何选择这些字符。

4 个答案:

答案 0 :(得分:8)

你真的应该使用StringEscapeUtils.escapeHtml()中的Apache Commons Lang来代替正则表达式。例如。你需要做的就是:

String escaped = StringEscapeUtils.escapeHtml(input);

防范XSS的最佳做法是转义所有HTML实体,此方法会为您处理这些情况。否则,您将编写,测试和维护自己的代码以执行已完成的操作。有关详细信息,请参阅OWASP XSS (Cross Site Scripting) Prevention Cheat Sheet

答案 1 :(得分:3)

Java正则表达式不应该对尖括号进行任何特殊处理。这应该可以正常工作:

myString.replace("<", "less than").replace(">", "greater than");

希望有所帮助。

-tjw

答案 2 :(得分:1)

作为regex的替代方法,您可以使用像Apache Commons StringEscapeUtils类这样的实用程序类,在将HTML字符串发布回服务器并将其存储在数据库中或重新发送之前对其进行编码作为输出。

答案 3 :(得分:1)

由于您标记了此,我想补充一点,在JSP中转义HTML / XML的常规方法是使用JSTL <c:out>标记或fn:escapeXml()功能

E.g。

<c:out value="${user.name}" />
<input type="text" name="name" value="${fn:escapeXml(user.name)}" />

不需要Apache Commons Lang。另外,逃避应该在视图方面完成,而不是在模型/控制器方面。

另见: