wordpress - 检查无效 UTF-8、转换单个小于号以及出于安全考虑剥离八位字节的原因
问题描述
我正在搜索有关清理 Wordpress 上的用户输入文本区域字段的信息。
我发现了几个消毒功能,但功能之间有一些不同。
我想知道消毒功能的功能之一sanitize_text_field( string $str )
首先,我想知道“检查无效 UTF-8”的原因,为什么要对无效 UTF-8 进行清理?
其次,我想将单个 < 字符转换为实体。
三、“Strips octets”的原因
提前谢谢你的帮助!
解决方案
我不喜欢“输入清理”一词。输入清理是一个误导性术语,表示您可以对所有数据挥动魔杖并将其设为“安全数据”。问题是当数据被不同的软件解释时,“安全”的定义发生了变化,编码要求也是如此。同样,“有效”数据的概念因上下文而异——您的数据很可能需要特殊字符('、、&、<)——请注意,SO 允许所有这些作为数据。
可以安全嵌入到 SQL 查询中的输出可能不安全地嵌入到 HTML 中。或斯威夫特。或 JSON。或外壳命令。或 CSV。并且剥离(或彻底拒绝)值以便它们可以安全地嵌入所有这些上下文(以及许多其他上下文)中,限制性太强。
那么我们应该怎么做呢?确保数据永远不会造成损害。实现这一点的最佳方法是首先避免解释数据。参数化 SQL 查询就是一个很好的例子;参数永远不会被解释为 SQL,它们只是由数据库作为数据处理。
相同的数据可用于其他其他格式,例如 HTML。在这种情况下,数据应在嵌入时针对该特定语言进行编码/转义。因此,为了防止 XSS,数据在被放入输出时应该是 HTML 转义(或 javascript 或 URL 转义)。不是在输入时。这同样适用于其他嵌入情况。
那么,我们应该直接通过任何我们直接通过的东西吗?
不 - 您肯定可以检查有关用户输入的内容,但这高度依赖于上下文。让我们称其为 - 验证。确保这是在服务器上完成的。一些例子:
- 您通常应该验证任何字符串仅包含对其编码的有效字符(例如,没有无效的 UTF-8 序列)
- 如果一个字段应该是一个整数,你当然可以验证这个字段以确保它包含一个整数(或者可能是 NULL)。
- 您通常可以检查特定值是否是一组已知值中的一个(白名单验证)
- 您可以要求大多数字段具有最小和最大长度。
为什么确保有效的 UTF-8 很重要?因为无效的 UTF-8 序列是绕过验证(尤其是黑名单验证)或将可见输入伪装成其他东西的好方法。技术堆栈的不同层经常对它们进行不同的解释。请参阅UTF-8 是否存在任何安全错误?有关此类攻击的更多详细信息。
推荐阅读
- python - 使用 igraph python 查找图的巨型组件的直径和平均最短路径长度
- sql - 合并具有相同列值的行
- java - Why my Object ArrayList loop result is incorrect?
- python - 在opencv中应用索贝尔和拉普拉斯滤波器后的图像边缘检测
- java - Selenium 中 Action 类的 Keys.DELETE 没有被删除
- android - 无法实例化一个或多个类 TextInputEditText 内部错误
- c++ - C函数的C++回调
- asp.net - IIS - dotnetcore - 混合模式应用程序的应用程序池未启动
- java - 为 org.springframework.core.io.Resource 对象分配名称
- android - ExoPlayer 谷歌图书馆集成