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

  • 相关阅读:
    POJ 3672 水题......
    POJ 3279 枚举?
    STL
    241. Different Ways to Add Parentheses
    282. Expression Add Operators
    169. Majority Element
    Weekly Contest 121
    927. Three Equal Parts
    910. Smallest Range II
    921. Minimum Add to Make Parentheses Valid
  • 原文地址:https://www.cnblogs.com/milantgh/p/3602141.html
Copyright © 2011-2022 走看看