最好是在数据库中保存确切的用户输入,还是为xss和store清理它。 或者存储直接用户输入,清理并显示它? 请指导我。
由于
答案 0 :(得分:4)
我想说最好将确切的数据存储在数据库中,并在需要显示时正确地将其转义。如果您以后想要使用危险字符和转义可能不同的其他介质来显示它,这将使事情变得更容易。
还有一些其他问题依赖于自定义“清理”功能,而不是使用标准库为您的语言提供的转义功能。
不必要的限制 - 例如,如果您始终删除<script>
个标签,则人们将无法在您的网站上谈论<script>
个标签,就像我刚才那样现在。对某些网站来说可能没什么问题,但其他网站则不行。
微妙的错误 - 如果你编写自己的“清理”功能,你可能会错过一些你没有考虑过的危险输入。一个示例是使用空字符串替换<script>
,但忘记用户可以输入<scri<script>pt>
,替换后将变为<script>
。使用内置的转义函数通常可以正常工作,因为它们(希望)由经验丰富的程序员编写,经过良好测试并在数千个安全性很重要的其他系统中使用。
特殊情况 - 如果您决定清除所有输入,例如在存储之前删除所有字符串中的'<'
和'>'
,您可能迟早会发现至少有一个特定字段无法清除,因为这些字符在该字段中是绝对必要的,因此您必须转义它。现在您已经创建了一种情况,您必须记住是否应该将转义应用于数据。这增加了错误的可能性,并且很难一目了然地看到你的代码是否忘记了逃避或者是否有其中一个字段无法逃脱。