在javascript中过滤转义尖括号

filtering escaped angle brackets in javascript

本文关键字:转义 过滤 javascript      更新时间:2023-09-26

我有一个javascript特性,允许用户在页面上放置任意文本字符串。我不希望他们能够插入html或其他代码,只是纯文本。

所以我认为去掉所有的尖括号(< >)就可以了。(我不在乎他们是否在页面上有"破碎"的html,或者他们不能在他们的文本中放入尖括号)然后我意识到我必须过滤转义尖括号(&lt; &gt;)和其他可能。

为了安全起见,我需要过滤掉哪些内容?去掉所有的尖括号就可以了吗?

删除所有尖括号会奏效吗?

用转义后的形式替换所有尖括号。这样,人们可以随心所欲地编写"代码",而它只是以纯文本的形式显示。

确保你做的第一件事是将&替换为&amp;

a)对于HTML内容,只要<就足够了。

b)对于属性值,例如,如果它在<input name="sendtoserver" value="custom text"/>中,您需要注意双引号,但这是所有必要的。然而,<>也很好。

这取决于上下文。如果你想安全起见,告诉你的JavaScript使用innerText,它不需要编码,但你可能想把css设置为white-space:pre-wrap。这样更不容易出错,但也更不兼容浏览器。

c)在一个松散相关的注意事项上,当使用反斜杠转义JavaScript字符串终止符时,可能会悄悄出现的项目是,如果您将内容放在脚本中,您需要照顾</script>(不区分大小写),您可以只转义<//应该足够