我想用一个人的名字清理一个简单的文本字段,以防止 XSS 等。Stackoverflow 几乎说我必须列入白名单。我不明白这一点。如果我只是从输入值中删除所有<
and ,或者用and>
替换它们,那不排除代码注入吗?还是我错过了什么?也许您只需要在必须忍受尖括号的更复杂场景中加入白名单?>
&ls;
抱歉,如果这是一个愚蠢的问题,重要的是要做到这一点。
我想用一个人的名字清理一个简单的文本字段,以防止 XSS 等。Stackoverflow 几乎说我必须列入白名单。我不明白这一点。如果我只是从输入值中删除所有<
and ,或者用and>
替换它们,那不排除代码注入吗?还是我错过了什么?也许您只需要在必须忍受尖括号的更复杂场景中加入白名单?>
&ls;
抱歉,如果这是一个愚蠢的问题,重要的是要做到这一点。
是白名单还是编码取决于您希望如何使用文本。
如果您打算将输入视为纯文本,那么对特殊字符进行编码就足够了,并且只要您注意不要让未编码的文本出现在 HTML 输出中的任何位置,输入的任何 HTML 代码都会显示为文本。(这包括确保您与之交互的任何其他系统都不会不当使用未编码的文本。)
如果您想在输入中允许某些标记,例如文本样式或链接,那么您必须将您允许的标记列入白名单并删除所有其他标记。
不,这还不够,因为如果您要将人名包含在 html 属性中,您还需要转义其中包含的任何双引号。