通过删除尖括号安全来消毒html?

时间:2015-05-18 02:19:14

标签: code-injection html-sanitizing javascript-injection

我想用一个人的姓名清理一个简单的文本字段,以防止XSS等。 Stackoverflow几乎说我必须白名单。我不明白这一点。如果我只是从输入值中删除所有<>,或者将其替换为&gt;&ls;,那么这不会排除代码注入吗?或者我错过了什么?也许你只需要在更复杂的情况下将白名单列入白名单,你必须忍受尖括号?

很抱歉,如果这是一个愚蠢的问题,那么做到这一点非常重要。

2 个答案:

答案 0 :(得分:1)

是否列入白名单或编码取决于您希望如何使用该文本。

如果您打算将输入视为纯文本,那么编码特殊字符就足够了,输入的任何HTML代码都只会显示为文本,只要您注意不要让未编码的文本在HTML输出中的任何位置结束。 (这包括确保与您交互的任何其他系统不会不恰当地使用未编码的文本。)

如果您想在输入中允许某些标记,例如文本样式或链接,那么您必须将您允许的标记列入白名单并删除所有其他标记。

答案 1 :(得分:0)

不,这还不够,因为如果您要在html属性中包含该人的姓名,您还需要转义其中包含的任何双引号。