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

HTML中哪些字符需要转义?

姬自强
2023-03-14
问题内容

它们是否与XML相同,也许还要加上空格( )?

我发现的HTML转义字符一些大名单,但我不认为他们 必须 进行转义。我想知道 需要 逃避什么。


问题答案:

如果你在文本内容预期的位置在文档中插入文本内容1,你通常只需要,你会在XML逃脱相同的字符。在元素内部,这仅包括实体转义&与号和元素定界符小于和大于符号< >

& becomes &amp;
< becomes &lt;
> becomes &gt;

在属性值内部,还必须转义使用的引号字符:

" becomes &quot;
' becomes &#39;

在某些情况下,跳过这些字符中的某些字符可能是安全的,但是我建议您在所有情况下都跳过所有五个字符,以减少犯错的可能性。

如果您的文档编码不支持您正在使用的所有字符,例如您尝试在ASCII编码的文档中使用表情符号,则还需要转义这些字符。如今,大多数文档都使用完全支持Unicode的UTF-8编码进行编码,而无需这样做。

通常,您不应将空格转义为&nbsp;&nbsp;不是正常的空间,而是一个不间断的空间。您可以使用这些空格代替常规空格,以防止在两个单词之间插入换行符,或者在不自动折叠的情况下插入多余的空格,但这通常是很少见的。除非您有一个设计约束,否则请不要这样做。

1所谓“期望文本内容的位置”,是指在其中包含适用常规解析规则的元素或带引号的属性值内。例如:<p>HERE</p><p title="HERE">...</p>。我上面写的内容 不适
用于具有特殊解析规则或含义的内容,例如脚本或样式标签内部,或作为元素或属性名称。例如:<NOT-HERE>...</NOT- HERE><script>NOT-HERE</script><style>NOT-HERE</script>,或<p NOT-HERE="...">...</p>

在这些情况下,规则更复杂,并且引入安全漏洞要容易得多。 我强烈建议您不要在任何这些位置插入动态内容。
我已经看到有能力的,具有安全意识的开发人员团队通过假设他们已经正确编码了这些值而忽略了边缘情况,从而引入了漏洞。通常有一个更安全的选择,例如将动态值放入属性中,然后使用JavaScript处理它。

如果需要,请阅读开放式Web应用程序安全项目的XSS预防规则,以帮助您理解一些需要牢记的问题。



 类似资料:
  • 在Bash中是否有需要转义的字符的全面列表?是否可以只使用检查它? 并且工作正常,没有转义。是否意味着不需要转义?这是检查必要性的好方法吗? 更一般的是:在和中转义的字符是否相同?

  • 只想确认Oracle SQL中需要转义哪些字符才能避免SQL注入?到目前为止,我只发现这篇文章似乎回答了我的问题:https://ss64.com/ora/syntax-escape.html.然而,正如我所听说的,amphora“@”字符也需要转义,因此,我认为上面的文章中有不完整的需要转义的字符列表。如果有人能告诉我Oracle SQL中需要转义的字符的完整列表,我将不胜感激。

  • 问题内容: 我刚刚编写了一个与php函数一起使用的正则表达式,其中包含以下部分: 匹配任何单词字符,以及减号和点。虽然它似乎可以在preg_match中工作,但我尝试将其放入名为Reggy的实用程序中,并且它抱怨 “ char类的空范围” 。反复试验告诉我,这个问题已通过转义减号,将正则表达式转换为 由于原始版本似乎可以在PHP中运行,所以我想知道为什么还是应该转义减号,并且-因为点也是PHP中具

  • 问题内容: 在HTML属性 名称=值 对中,“名称”部分允许使用哪些字符?.....看一些常见的属性,似乎只使用字母(az和AZ),但还可以允许其他字符吗?…也许是数字(0-9),连字符(-)和句点(。)…对此有任何规范吗? 问题答案: 这取决于“允许”的含义。每个标签都有一个固定的有效属性名称列表,在html中,它们不区分大小写。在一个重要的意义上,仅允许以正确的顺序排列这些字符。 另一种查看方

  • 问题内容: 根据选择器文档,必须使用双反斜杠等进行转义。 我有一个这样创建的选择器(假设属性在此示例中)。 我可以写一个正则表达式为我逃脱括号吗? 问题答案: 如果您希望某些东西具有任何价值,请尝试以下操作: 这可以通过用两个反斜杠转义jQuery文档的“ 选择器”页面上列出的所有CSS元字符来工作。 请记住,在您的情况下,无需执行此类棘手的操作。您可以使用过滤器功能选择具有给定值的所有选项元素,

  • 我在datasource password字段中有特殊字符,如“(双引号)、@,~,!,%,&,},”。当我运行springboot应用程序时,当它试图连接到我遇到的数据库时- 我的问题是: (1)是否有方法查看Spring尝试连接时使用的密码? (2)是否需要转义中密码中的任何特殊字符? 我能够使用一个独立的java程序连接到数据库,但是我必须转义密码中的双引号。我在后端使用了SpringBoo