Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我是否需要确保输出数据是有效的UTF-8?_Php_Utf 8 - Fatal编程技术网

Php 我是否需要确保输出数据是有效的UTF-8?

Php 我是否需要确保输出数据是有效的UTF-8?,php,utf-8,Php,Utf 8,我有一个网站,告诉我输出是UTF-8,但我从来没有确定它是。我是否应该使用正则表达式或Iconv库将UTF-8转换为UTF-8,从而留下无效序列?如果我不这样做,这是一个安全问题吗?首先,我决不会盲目地将其编码为UTF-8,可能是第二次,因为这会导致无效字符,正如您所说。在尝试这样做之前,我肯定会尝试检测内容的字符集是否不是UTF-8 其次,如果所讨论的内容来自一个您可以控制和控制字符集的源,例如表和连接中使用UTF-8的文件或使用UTF-8的数据库,我会信任该源,除非有什么提示我不能,或者发生

我有一个网站,告诉我输出是UTF-8,但我从来没有确定它是。我是否应该使用正则表达式或Iconv库将UTF-8转换为UTF-8,从而留下无效序列?如果我不这样做,这是一个安全问题吗?

首先,我决不会盲目地将其编码为UTF-8,可能是第二次,因为这会导致无效字符,正如您所说。在尝试这样做之前,我肯定会尝试检测内容的字符集是否不是UTF-8

其次,如果所讨论的内容来自一个您可以控制和控制字符集的源,例如表和连接中使用UTF-8的文件或使用UTF-8的数据库,我会信任该源,除非有什么提示我不能,或者发生了什么奇怪的事情。如果内容或多或少来自您控制范围之外的随机位置,那么就更有理由对其进行检查,如果您能够检测到,还可以尝试从其他字符集对og转换进行重新编码。因此,底线是:视情况而定


至于这是否是一个安全问题,我不这么认为,至少我想不出任何可能被利用的场景,但我会留给其他人来确定

首先,我决不会盲目地将其编码为UTF-8,可能是第二次,因为这会导致无效字符,正如您所说的那样。在尝试这样做之前,我肯定会尝试检测内容的字符集是否不是UTF-8

其次,如果所讨论的内容来自一个您可以控制和控制字符集的源,例如表和连接中使用UTF-8的文件或使用UTF-8的数据库,我会信任该源,除非有什么提示我不能,或者发生了什么奇怪的事情。如果内容或多或少来自您控制范围之外的随机位置,那么就更有理由对其进行检查,如果您能够检测到,还可以尝试从其他字符集对og转换进行重新编码。因此,底线是:视情况而定


至于这是否是一个安全问题,我不这么认为,至少我想不出任何可能被利用的场景,但我会留给其他人来确定

这不是一个安全问题,但如果您发送无效的UTF-8字节流,您的用户(尤其是非英语用户)将非常恼火

在大多数浏览器的最佳情况下,所有无效字符串都会消失或显示为胡言乱语。最糟糕的情况是,浏览器停止解释您的页面,并显示类似无效编码的内容。例如,Linux上的一些文本编辑器gedit就是这样做的

好吧,让它保持现实:如果你有一个以英语为中心的网站,而不严重依赖一些数学字符或Unicode箭头,它几乎不会有什么区别。但是,如果你为一个中国网站服务,你完全可以把它搞砸


干杯,

这不是安全问题,但如果您发送无效的UTF-8字节流,您的用户(尤其是非英语用户)将非常恼火

在大多数浏览器的最佳情况下,所有无效字符串都会消失或显示为胡言乱语。最糟糕的情况是,浏览器停止解释您的页面,并显示类似无效编码的内容。例如,Linux上的一些文本编辑器gedit就是这样做的

好吧,让它保持现实:如果你有一个以英语为中心的网站,而不严重依赖一些数学字符或Unicode箭头,它几乎不会有什么区别。但是,如果你为一个中国网站服务,你完全可以把它搞砸


干杯,

每个人都会把字符集搞砸,所以一般来说,你不能相信任何外部来源。验证所提供的输入对于它声称使用的字符集确实有效是一种很好的做法。幸运的是,使用UTF-8,您可以对有效性做出相当安全的断言。

每个人都会把字符集搞得一团糟,因此通常您不能信任任何外部源。验证所提供的输入对于它声称使用的字符集确实有效是一种很好的做法。幸运的是,使用UTF-8,您可以对有效性做出相当安全的断言。

如果用户可以发送任意字节,那么是的,不确保有效的utf8输出会带来安全隐患。但是,根据您存储数据的方式,不确保输入上的utf8数据有效也会带来安全隐患,例如,如果允许utf8为无效的utf8,则可能会创建一个适用于utf8输入的变体,因此您确实应该使用iconv将输入上的utf8转换为utf8,只需避免在输出上验证utf8的整个问题


您希望检查输出是否有效的两个主要安全原因是utf-8,以避免过长的字节序列-也就是说,字节序列意味着一些字符,如“”。如果用户可以以任意字节发送,则是的,存在安全隐患 无法确保有效的utf8输出。但是,根据您存储数据的方式,不确保输入上的utf8数据有效也会带来安全隐患,例如,如果允许utf8为无效的utf8,则可能会创建一个适用于utf8输入的变体,因此您确实应该使用iconv将输入上的utf8转换为utf8,只需避免在输出上验证utf8的整个问题


检查输出是否有效的utf-8的两个主要安全原因是为了避免过长的字节序列,即,字节序列的情况意味着一些字符,如“数据来自何处?您无法确保数据是UTF-8编码的?数据来自任意用户,并输出到其他用户的屏幕上。当然,应用过滤。然后在存储数据之前检查数据的有效性。是的,当然,应该在存储数据之前完成,但我的问题是这是否是一个必需的步骤。在这种情况下,我会说这是一个必需的步骤,除非你希望在你的存储和输出中有大量的垃圾。你无法确保数据是UTF-8编码的数据从何而来?数据来自任意用户,当然是在其他用户的屏幕上输出的应用筛选。然后在存储数据之前检查数据的有效性。是的,当然,应该在存储数据之前完成,但我的问题是这是否是必需的步骤。在这种情况下,我会说这是必需的步骤,除非您希望在存储和输出中有大量垃圾。