数据库中恶意内容的数据完整性

信息安全 数据库 正直
2021-09-06 14:59:07

从数据完整性的角度来看,如果我将以下代码持久保存到我的数据库中:

<script>
   alert('hi');  
</script>

我应该在持久性之前对其进行消毒,例如<进入&lt然后检索进行解码吗?或者仅在检索时进行清理是否更安全,例如在 UI 中?

1个回答

由于注入攻击以解释输出的方式利用控制序列,并且由于不同的输出格式使用不同的控制序列(想想 JavaScript 与 SQL 与 HTML),因此您的清理技术需要反映输出的去向。如果您在输入时对输出进行消毒,那么您就是在假设该输出将被发送到哪里,这可能被证明是不正确的,可能是由于未来的一些变化或一些您没有想到的用例。

因此,作为一项规则,我建议对输出进行消毒,以反映您输出格式的特定注入敏感性。

请注意,如果您存储的是预先格式化的输入,并且在输出时格式的上下文不可用(例如为博客文章存储 HTML),您可以对输入进行一些检查,但这与仅仅一般逃逸。

同样,作为一项规则,您的输出而不是您的输入通常会转义,但要根据需要进行例外处理,因为当您在应用程序中创建需要仔细保护的漏洞时,需要对这些例外进行额外的审查。