首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于安全文件上载的魔术号

用于安全文件上载的魔术号
EN

Stack Overflow用户
提问于 2016-08-07 19:38:41
回答 1查看 3.5K关注 0票数 0
  1. 魔术-数字检查是一个好主意来验证一个文件,或者是另一种更好的方法。
  2. 这是我的函数想法,检查$_FILES['tmp_name']的魔力号,但在这一点上,文件是加载到服务器上的临时文件夹。我不能在同时检查它是流到服务器,所以我不能中止加载到临时之前,它是完全加载。
代码语言:javascript
复制
// check file type with the first bit of magic numbers
function is_magic_number_ok($file)
{

    switch ($this->extension) {
        case '.ai':
            $magic_option = array(
                'magic_number_hex'        => '25504446',
                'magic_number_bit_length' => 4,
            );
            break;
        case '.bmp':
            $magic_option = array(
                'magic_number_hex'        => '424D',
                'magic_number_bit_length' => 2,
            );
            break;
        case '.class':
            $magic_option = array(
                'magic_number_hex'        => 'CAFEBABE',
                'magic_number_bit_length' => 4,
            );
            break;
        case '.jpg':
            $magic_option = array(
                'magic_number_hex'        => 'FFD8',
                'magic_number_bit_length' => 2,
            );
            break;
        case '.jp2':
            $magic_option = array(
                'magic_number_hex'        => '0000000C6A5020200D0A',
                'magic_number_bit_length' => 10,
            );
            break;
        case '.gif':
            $magic_option = array(
                'magic_number_hex'        => '47494638',
                'magic_number_bit_length' => 4,
            );
            break;
        case '.tif':
            $magic_option = array(
                'magic_number_hex'        => '4949',
                'magic_number_bit_length' => 2,
            );
            break;
        case '.png':
            $magic_option = array(
                'magic_number_hex'        => '89504E47',
                'magic_number_bit_length' => 4,
            );
            break;
        default:
            return false;

    }

    // get the bit limited file length and convert to HEX
    $file_bin_stream = file_get_contents($file, NULL, NULL, 0, $magic_option['magic_number_bit_length']);

    $file_hex = strtoupper(bin2hex($file_bin_stream));

    if ($magic_option['magic_number_hex'] == $file_hex) {
        echo 'true';
        return true;
    } else {
        echo 'false';
        return false;
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-07 19:42:22

  1. 这主意不错,但并不总是管用。有些文件类型没有正确使用神奇的数字。
  2. 要做到这一点,您必须在web服务器中做一些事情。在文件已经上传之前,PHP代码不会执行。

最后,php有一个内置的文件信息扩展名,它将为您完成大部分工作。更多信息:http://php.net/fileinfo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38817825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档