HTML实体转义以防止XSS
我有一些用户输入。在我的代码中,我确保对以下符号进行转义:
& -> & < -> <
> -> >
OWASP指出还有更多的字符可以转义。
对于属性,我做了另一种转义:
& -> & " -> "
这样可以确保所有属性都用“括起来。”这样就可以确定自己的html属性,而不是HTML本身。
回答:
我也使用OWASP(ESAPI)库,以转义不同显示类型的字符串,请使用:
String html = ESAPI.encoder().encodeForHTML("hello < how > are 'you'");String html_attr = ESAPI.encoder().encodeForHTMLAttribute("hello < how > are 'you'");
String js = ESAPI.encoder().encodeForJavaScript("hello < how > are 'you'");
HTML(假设为jsp)
<tag attr="<%= html_attr %>" onclick="alert('<%= js %>')"><%= html %></tag>
( 2017 )
由于ESAPI编码器被认为是旧版,因此已经创建了一个更好的替代方案,并且正在积极维护中,我强烈建议改用OWASP
Java编码器。
如果您的项目已经使用ESAPI
,则添加了集成,您可以使用该库进行编码。
其用法已在其Wiki页面上进行了说明,但是为了完整起见,这是您可以使用它来对数据进行上下文编码的方式:
// HTML ContextString html = Encoder.forHtml("u<ntrus>te'd'");
// HTML Attribute Context
String htmlAttr = Encoder.forHtmlAttribute("u<ntrus>te'd'");
// Javascript Attribute Context
String jsAttr = Encoder.forJavaScriptAttribute("u<ntrus>te'd'");
HTML(假设为jsp)
<div data-attr="<%= htmlAttr %>" onclick="alert('<%= jsAttr %>')"> <%= html %>
</div>
PS: 存在更多上下文,并且库支持
以上是 HTML实体转义以防止XSS 的全部内容, 来源链接: utcz.com/qa/430185.html