检查无效UTF-8的原因,转换单个小于符号,出于安全考虑,剥离八位数。

问题描述 投票:0回答:1

我正在搜索关于Wordpress上用户输入文字区域的消毒功能。

我找到了几个消毒功能,但功能之间有一些不同。

我想知道消毒功能的功能是什么。sanitize_text_field( string $str )

首先,我想知道 "检查无效UTF-8 "的原因,为什么要对无效UTF-8进行消毒?

第二,我想知道将单个<字符转换为实体的原因。

第三,"剥离八位数 "的原因是什么?

先谢谢您的帮助!

wordpress security xss sql-injection
1个回答
1
投票

我不喜欢 "输入消毒 "这个词。 输入消毒是一个误导性的术语,它表明你可以对所有数据挥动魔棒,使其成为 "安全数据"。问题是,当数据被不同的软件解释时,"安全 "的定义就会改变,编码要求也会改变。 同样,"有效 "数据的概念也因上下文的不同而不同--你的数据很可能需要特殊的字符(',",&,<)--请注意,SO允许所有这些字符作为数据。

嵌入到SQL查询中的输出可能是安全的,但嵌入到HTML中就不安全了。或Swift。 或JSON。或者shell命令。或者CSV。剥离(或直接拒绝)值,使它们可以安全地嵌入到所有这些上下文(和许多其他)中,这太过严格。

那么我们应该怎么做呢?确保数据永远不会造成伤害。 实现这一目标的最好方法是首先避免对数据进行解释。参数化的SQL查询就是一个很好的例子,参数永远不会被解释为SQL,它们只是被数据库作为数据进行处理。

同样的数据可能会被用于其他格式,例如HTML。在这种情况下,数据在被嵌入的那一刻就应该为该特定语言进行编码转义。因此,为了防止XSS,数据应该在被放入输出时进行HTML转义(或javascript或URL转义)。而不是在输入时。这同样适用于其他嵌入情况。

那么,我们应该直接通过任何我们得到的东西吗?

不--你肯定可以检查用户输入的东西,但这是高度依赖于上下文的。让我们称其为--验证。 确保这是在服务器上完成的。 一些例子。

  • 你通常应该验证任何字符串是否只包含其编码的有效字符(例如,没有无效的UTF-8序列)。
  • 如果一个字段应该是一个整数,你当然可以验证这个字段,以确保它包含一个整数(或者可能是NULL)。
  • 你可以经常检查一个特定的值是否是一组已知值中的一个(白名单验证)。
  • 您可以要求大多数字段有一个最小和最大的长度。

为什么确保有效的UTF-8很重要? 因为无效的UTF-8序列是绕过验证(尤其是黑名单验证)或将可见的输入伪装成其他东西的好办法。 它们经常被不同层级的技术堆栈解释为不同的内容。 请看 UTF-8是否存在安全漏洞? 以了解更多关于这种攻击的细节。

© www.soinside.com 2019 - 2024. All rights reserved.