当前位置: 首页 > 面试题库 >

HTML实体转义以防止XSS

孙乐逸
2023-03-14
问题内容

我有一些用户输入。在我的代码中,我确保对以下符号进行转义:

& -> & 
< -> &lt; 
> -> &gt;

OWASP指出还有更多的字符可以转义。

对于属性,我做了另一种转义:

& -> &amp; 
" -> &quot;

这样可以确保所有属性都用“括起来。”这样就可以确定自己的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 Context
String 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: 存在更多上下文,并且库支持



 类似资料:
  • 问题内容: 当Angular插入标记并将范围变量插入样式模板时,它将转义HTML。 我正在构建的应用程序要求用户创建模板,使用大括号表示法插入变量名称,我不想通过引入某些变量的指令和其他变量的curlies来使其过于复杂。 有没有办法通过卷曲模板呈现未转义的HTML? 我唯一的选择是在用户尝试渲染时渲染代理元素,然后可以使用jQLite抓取并手动插入HTML,但这真是一团糟。有任何想法吗? 问题答

  • 本文向大家介绍怎么防止HTML被转义?相关面试题,主要包含被问及怎么防止HTML被转义?时的应答技巧和注意事项,需要的朋友参考一下 <h1 dangerouslySetInnerHTML={{__html: 'cc © 2015'}}></h1>

  • 问题内容: 我试图在Java中放置一些反SQL注入,并发现使用“ replaceAll”字符串函数非常困难。最后,我需要,将转换现有的功能使得当字符串由MySQL的SQL注入评估将被阻止。 我已经整理了一些正在使用的代码,并且该函数中的所有内容都使我大失所望。如果有人碰巧有这个例子,我将不胜感激。 问题答案: PreparedStatement是可行的方法,因为它们使SQL注入成为不可能。这是一个

  • 问题内容: 我有一些与XML-RPC后端通信的Javascript代码。XML-RPC返回以下形式的字符串: 但是,当我使用Javascript将字符串插入HTML时,它们将按字面显示。我没有看到图片,我从字面上看到了字符串: 我的猜测是HTML正在通过XML-RPC通道进行转义。 如何取消对Javascript中的字符串的转义?我尝试了此页面上的技术,但未成功:http : //paulschr

  • 本文向大家介绍浅谈html转义及防止javascript注入攻击的方法,包括了浅谈html转义及防止javascript注入攻击的方法的使用技巧和注意事项,需要的朋友参考一下 有的时候页面中会有一个输入框,用户输入内容后会显示在页面中,类似于网页聊天应用。如果用户输入了一段js脚本,比例:<script>alert('test');</script>,页面会弹出一个对话框,或者输入的脚本中有改变页

  • 问题内容: 我正在使用MySQL API的功能 根据文档,它转义以下字符: 现在,我查看了OWASP.org的ESAPI安全库,并在Python端口中包含以下代码(http://code.google.com/p/owasp- esapi-python/source/browse/esapi/codecs/mysql。 py ): 现在,我想知道是否真的需要转义所有这些字符。我知道为什么%和_在那