zoukankan      html  css  js  c++  java
  • PHP iconv函数字符串转码导致截断问题

    1、iconv函数原型

    string iconv ( string $in_charset , string $out_charset , string $str )

    in_charset:输入的字符集

    out_charset:输出的字符集

    str:要转换的字符串

    具体查看php手册:http://www.php.net/manual/zh/function.iconv.php

    2、iconv导致字符串截断

    iconv在字符编码转换时可能导致字符串截断。当$str中有一个字符不能被目标字符集所表示时,str 从第一个无效字符开始截断并导致一个 E_NOTICE。

    例如:$d = iconv(“UTF-8″, “gb2312″, $c);该代码是将变量$c从UTF-8编码转换为gb2312。那么当$c中存在一个不能被gb2312表示的字符时,那么就会截断

    该字符之后的内容

    3、fuzz脚本

    <?php
    $a ="1.php";
    $b =".jpg";for($i=0; $i<200; $i++){
        $c = $a.chr($i).$b;
        $d = iconv("UTF-8","gb2312", $c);
        echo "$i ==> ".$d."n";}

    可以发现当$i为128(0×80)时输出的字符串截断为1.php。为什么0×80开始截断,可以看utf8和gbk的编码范围http://www.docin.com/p-178554948.html

    4、漏洞案例

    http://www.wooyun.org/bugs/wooyun-2014-048293

    5、注意

    测试时发现在linux环境下不会截断,在windows下成功。

    原文:http://hi.baidu.com/qingsh4n/item/e3c4261e045d17161994ecaa

    推荐使用mb_convert_encoding 函数转换编码,函数说明参考 http://www.php.net/mb_convert_encoding

  • 相关阅读:
    Linux查看进程是否存在及启动或重启
    Leetcode 31.下一个排列 tag数组
    Leetccode 27.移除元素 tag数组
    Leetcode 24:两两交换链表中的节点
    当代90后的焦虑
    典型java面试题
    TD编译环境变量说明
    ubuntu20.04安装TD工具后编译错误
    ssh免密登录在Linux服务器之间的设置
    ubuntu20.04导航栏放到底部
  • 原文地址:https://www.cnblogs.com/milantgh/p/3602141.html
Copyright © 2011-2022 走看看