[Помогите] аплоад по расширению файла

Тема в разделе "Wordpress", создана пользователем null_999, 18 мар 2008.

Статус темы:
Закрыта.
Модераторы: DzSoft, Sorcus
  1. null_999

    null_999 Писатель

    Регистр.:
    10 фев 2008
    Сообщения:
    7
    Симпатии:
    1
    Ну почему я так тему назвал и так понятно, что бы вы зашли и помогли мне. Как вы знаете, то wordpress-2.2.3 можно загрузить любой файл с любым расширением (типом), так вот как мне избежать этого. Я помниться где то видал интересный плагин он как раз для этого и сделан, но найти его опять не получается. Еще есть какой то файл (my-hakсs.php) что то вроде этого, я так сначала подумал он и сделан для этого что бы запрещать загрузку таких файлов, как php и др., но найти этого файла я не смог, и как я вычитал, то он вроде вообще не для этого сделан. Поэтому огромная просьба помогите сделать так, что бы я мог запретить загрузку файлов которые мне не нужны, что то ввиде фильтра поставить. Я и облазил уже файл загрузочника, там вроде есть что то типа фильтра только не понятно где и как его использовать!
     
  2. invago

    invago Создатель

    Регистр.:
    21 окт 2007
    Сообщения:
    21
    Симпатии:
    16
    Проставь в том фильтре только те расширения которые можно грузить... и все...
     
  3. null_999

    null_999 Писатель

    Регистр.:
    10 фев 2008
    Сообщения:
    7
    Симпатии:
    1
    Ну вот где здесь можно вставить! Я и так знаю что надо вставить, а где? может я что не увидал!

    <?php
    require_once('admin.php');

    @header('Content-type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset'));

    if (!current_user_can('upload_files'))
    wp_die(__('You do not have permission to upload files.'));

    wp_reset_vars(array('action', 'tab', 'from_tab', 'style', 'post_id', 'ID', 'paged', 'post_title', 'post_content', 'delete'));

    // IDs should be integers
    $ID = (int) $ID;
    $post_id = (int) $post_id;

    // Require an ID for the edit screen
    if ( $action == 'edit' && !$ID )
    wp_die(__("You are not allowed to be here"));

    require_once('upload-functions.php');
    if ( !$tab )
    $tab = 'browse-all';

    do_action( "upload_files_$tab" );

    $pid = 0;
    if ( $post_id < 0 )
    $pid = $post_id;
    elseif ( get_post( $post_id ) )
    $pid = $post_id;
    $wp_upload_tabs = array();
    $all_atts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = 'attachment'");
    $post_atts = 0;

    if ( $pid ) {
    // 0 => tab display name, 1 => required cap, 2 => function that produces tab content, 3 => total number objects OR array(total, objects per page), 4 => add_query_args
    $wp_upload_tabs['upload'] = array(__('Upload'), 'upload_files', 'wp_upload_tab_upload', 0);
    if ( $all_atts && $post_atts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_parent = '$post_id'") )
    $wp_upload_tabs['browse'] = array(__('Browse'), 'upload_files', "wp_upload_tab_browse", $action ? 0 : $post_atts);
    if ( $post_atts < $all_atts )
    $wp_upload_tabs['browse-all'] = array(__('Browse All'), 'upload_files', 'wp_upload_tab_browse', $action ? 0 : $all_atts);
    } else
    $wp_upload_tabs['browse-all'] = array(__('Browse All'), 'upload_files', 'wp_upload_tab_browse', $action ? 0 : $all_atts);

    $wp_upload_tabs = array_merge($wp_upload_tabs, apply_filters( 'wp_upload_tabs', array() ));

    if ( !is_callable($wp_upload_tabs[$tab][2]) ) {
    $to_tab = isset($wp_upload_tabs['upload']) ? 'upload' : 'browse-all';
    wp_redirect( add_query_arg( 'tab', $to_tab ) );
    exit;
    }

    foreach ( $wp_upload_tabs as $t => $tab_array ) {
    if ( !current_user_can( $tab_array[1] ) ) {
    unset($wp_upload_tabs[$t]);
    if ( $tab == $t )
    wp_die(__("You are not allowed to be here"));
    }
    }

    if ( 'inline' == $style ) : ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
    <head>
    <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" />
    <title><?php bloginfo('name') ?> &rsaquo; <?php _e('Uploads'); ?> — WordPress</title>
    <link rel="stylesheet" href="<?php echo get_option('siteurl') ?>/wp-admin/wp-admin.css?version=<?php bloginfo('version'); ?>" type="text/css" />
    <?php if ( ('rtl' == $wp_locale->text_direction) ) : ?>
    <link rel="stylesheet" href="<?php echo get_option('siteurl') ?>/wp-admin/rtl.css?version=<?php bloginfo('version'); ?>" type="text/css" />
    <?php endif; ?>
    <script type="text/javascript">
    //<![CDATA[
    function addLoadEvent(func) {if ( typeof wpOnload!='function'){wpOnload=func;}else{ var oldonload=wpOnload;wpOnload=function(){oldonload();func();}}}
    //]]>
    </script>
    <?php do_action('admin_print_scripts'); wp_upload_admin_head(); ?>
    </head>
    <body>
    <?php
    else :
    add_action( 'admin_head', 'wp_upload_admin_head' );
    include_once('admin-header.php');
    ?>
    <div class='wrap'>
    <h2><?php _e('Uploads'); ?></h2>
    <?php
    endif;

    echo "<ul id='upload-menu'>\n";
    foreach ( $wp_upload_tabs as $t => $tab_array ) { // We've already done the current_user_can check
    $href = add_query_arg( array('tab' => $t, 'ID' => '', 'action' => '', 'paged' => '') );
    if ( isset($tab_array[4]) && is_array($tab_array[4]) )
    $href = add_query_arg( $tab_array[4], $href );
    $_href = clean_url( $href);
    $page_links = '';
    $class = 'upload-tab alignleft';
    if ( $tab == $t ) {
    $class .= ' current';
    if ( $tab_array[3] ) {
    if ( is_array($tab_array[3]) ) {
    $total = $tab_array[3][0];
    $per = $tab_array[3][1];
    } else {
    $total = $tab_array[3];
    $per = 10;
    }
    $page_links = paginate_links( array(
    'base' => add_query_arg( 'paged', '%#%' ),
    'format' => '',
    'total' => ceil($total / $per),
    'current' => $paged ? $paged : 1,
    'prev_text' => '&laquo;',
    'next_text' => '&raquo;'
    ));
    if ( $page_links )
    $page_links = "<span id='current-tab-nav'>: $page_links</span>";
    }
    }

    echo "\t<li class='$class'><a href='$_href' class='upload-tab-link' title='{$tab_array[0]}'>{$tab_array[0]}</a>$page_links</li>\n";
    }
    unset($t, $tab_array, $href, $_href, $page_links, $total, $per, $class);
    echo "</ul>\n\n";

    echo "<div id='upload-content' class='$tab'>\n";

    call_user_func( $wp_upload_tabs[$tab][2] );

    echo "</div>\n";

    if ( 'inline' != $style ) :
    echo "<div class='clear'></div></div>";
    include_once('admin-footer.php');
    else : ?>
    <script type="text/javascript">if(typeof wpOnload=='function')wpOnload();</script>

    </body>
    </html>
    <?php endif; ?>

    Добавлено через 12 минут
    \wp-admin\upload.php это внутренности этого файла
     
  4. Eclipsik

    Eclipsik Постоялец

    Регистр.:
    26 окт 2006
    Сообщения:
    142
    Симпатии:
    41
    А ты что в админке не нашел поля куда нужно вписывать расширения ?
     
  5. null_999

    null_999 Писатель

    Регистр.:
    10 фев 2008
    Сообщения:
    7
    Симпатии:
    1
    Нет, конечно же, потому что его там нет, это же не WordPressMU
     
  6. Ejen

    Ejen Постоялец

    Регистр.:
    24 авг 2006
    Сообщения:
    116
    Симпатии:
    24
    wp-admin\includes\files.php

    Чуть не там смотрели, ответ в этом файле, чуть ниже середины.
     
  7. aleksy_g

    aleksy_g Создатель

    Регистр.:
    28 окт 2007
    Сообщения:
    49
    Симпатии:
    1
    А можно ещё и средствами более конкретными, правилами htaccess
    типа
    <FilesMatch \.(?i:pdf|doc|rar|zip|ppt)$>
    Order allow,deny
    Deny from all
    </FilesMatch>
     
  8. null_999

    null_999 Писатель

    Регистр.:
    10 фев 2008
    Сообщения:
    7
    Симпатии:
    1
    <?php

    $wp_file_descriptions = array ('index.php' => __( 'Main Index Template' ), 'style.css' => __( 'Stylesheet' ), 'comments.php' => __( 'Comments' ), 'comments-popup.php' => __( 'Popup Comments' ), 'footer.php' => __( 'Footer' ), 'header.php' => __( 'Header' ), 'sidebar.php' => __( 'Sidebar' ), 'archive.php' => __( 'Archives' ), 'category.php' => __( 'Category Template' ), 'page.php' => __( 'Page Template' ), 'search.php' => __( 'Search Results' ), 'single.php' => __( 'Single Post' ), '404.php' => __( '404 Template' ), 'my-hacks.php' => __( 'my-hacks.php (legacy hacks support)' ), '.htaccess' => __( '.htaccess (for rewrite rules )' ),
    // Deprecated files
    'wp-layout.css' => __( 'Stylesheet' ), 'wp-comments.php' => __( 'Comments Template' ), 'wp-comments-popup.php' => __( 'Popup Comments Template' ));
    function get_file_description( $file ) {
    global $wp_file_descriptions;

    if ( isset( $wp_file_descriptions[basename( $file )] ) ) {
    return $wp_file_descriptions[basename( $file )];
    }
    elseif ( file_exists( ABSPATH . $file ) && is_file( ABSPATH . $file ) ) {
    $template_data = implode( '', file( ABSPATH . $file ) );
    if ( preg_match( "|Template Name:(.*)|i", $template_data, $name ))
    return $name[1];
    }

    return basename( $file );
    }

    function get_home_path() {
    $home = get_option( 'home' );
    if ( $home != '' && $home != get_option( 'siteurl' ) ) {
    $home_path = parse_url( $home );
    $home_path = $home_path['path'];
    $root = str_replace( $_SERVER["PHP_SELF"], '', $_SERVER["SCRIPT_FILENAME"] );
    $home_path = trailingslashit( $root.$home_path );
    } else {
    $home_path = ABSPATH;
    }

    return $home_path;
    }

    function get_real_file_to_edit( $file ) {
    if ('index.php' == $file || '.htaccess' == $file ) {
    $real_file = get_home_path().$file;
    } else {
    $real_file = ABSPATH.$file;
    }

    return $real_file;
    }

    function validate_file( $file, $allowed_files = '' ) {
    if ( false !== strpos( $file, '..' ))
    return 1;

    if ( false !== strpos( $file, './' ))
    return 1;

    if (':' == substr( $file, 1, 1 ))
    return 2;

    if (!empty ( $allowed_files ) && (!in_array( $file, $allowed_files ) ) )
    return 3;

    return 0;
    }

    function validate_file_to_edit( $file, $allowed_files = '' ) {
    $file = stripslashes( $file );

    $code = validate_file( $file, $allowed_files );

    if (!$code )
    return $file;

    switch ( $code ) {
    case 1 :
    wp_die( __('Sorry, can’t edit files with ".." in the name. If you are trying to edit a file in your WordPress home directory, you can just type the name of the file in.' ));

    case 2 :
    wp_die( __('Sorry, can’t call files with their real path.' ));

    case 3 :
    wp_die( __('Sorry, that file cannot be edited.' ));
    }
    }

    // array wp_handle_upload ( array &file [, array overrides] )
    // file: reference to a single element of $_FILES. Call the function once for each uploaded file.
    // overrides: an associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ).
    // On success, returns an associative array of file attributes.
    // On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ).
    function wp_handle_upload( &$file, $overrides = false ) {
    // The default error handler.
    if (! function_exists( 'wp_handle_upload_error' ) ) {
    function wp_handle_upload_error( &$file, $message ) {
    return array( 'error'=>$message );
    }
    }

    // You may define your own function and pass the name in $overrides['upload_error_handler']
    $upload_error_handler = 'wp_handle_upload_error';

    // $_POST['action'] must be set and its value must equal $overrides['action'] or this:
    $action = 'wp_handle_upload';

    // Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error'].
    $upload_error_strings = array( false,
    __( "The uploaded file exceeds the <code>upload_max_filesize</code> directive in <code>php.ini</code>." ),
    __( "The uploaded file exceeds the <em>MAX_FILE_SIZE</em> directive that was specified in the HTML form." ),
    __( "The uploaded file was only partially uploaded." ),
    __( "No file was uploaded." ),
    __( "Missing a temporary folder." ),
    __( "Failed to write file to disk." ));

    // All tests are on by default. Most can be turned off by $override[{test_name}] = false;
    $test_form = true;
    $test_size = true;

    // If you override this, you must provide $ext and $type!!!!
    $test_type = true;

    // Install user overrides. Did we mention that this voids your warranty?
    if ( is_array( $overrides ) )
    extract( $overrides, EXTR_OVERWRITE );

    // A correct form post will pass this test.
    if ( $test_form && (!isset( $_POST['action'] ) || ($_POST['action'] != $action ) ) )
    return $upload_error_handler( $file, __( 'Invalid form submission.' ));

    // A successful upload will pass this test. It makes no sense to override this one.
    if ( $file['error'] > 0 )
    return $upload_error_handler( $file, $upload_error_strings[$file['error']] );

    // A non-empty file will pass this test.
    if ( $test_size && !($file['size'] > 0 ) )
    return $upload_error_handler( $file, __( 'File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini.' ));

    // A properly uploaded file will pass this test. There should be no reason to override this one.
    if (! @ is_uploaded_file( $file['tmp_name'] ) )
    return $upload_error_handler( $file, __( 'Specified file failed upload test.' ));

    // A correct MIME type will pass this test. Override $mimes or use the upload_mimes filter.
    if ( $test_type ) {
    $wp_filetype = wp_check_filetype( $file['name'], $mimes );

    extract( $wp_filetype );

    if ( ( !$type || !$ext ) && !current_user_can( 'unfiltered_upload' ) )
    return $upload_error_handler( $file, __( 'File type does not meet security guidelines. Try another.' ));

    if ( !$ext )
    $ext = ltrim(strrchr($file['name'], '.'), '.');
    }

    // A writable uploads dir will pass this test. Again, there's no point overriding this one.
    if ( ! ( ( $uploads = wp_upload_dir() ) && false === $uploads['error'] ) )
    return $upload_error_handler( $file, $uploads['error'] );

    // Increment the file number until we have a unique file to save in $dir. Use $override['unique_filename_callback'] if supplied.
    if ( isset( $unique_filename_callback ) && function_exists( $unique_filename_callback ) ) {
    $filename = $unique_filename_callback( $uploads['path'], $file['name'] );
    } else {
    $number = '';
    $filename = str_replace( '#', '_', $file['name'] );
    $filename = str_replace( array( '\\', "'" ), '', $filename );
    if ( empty( $ext) )
    $ext = '';
    else
    $ext = ".$ext";
    while ( file_exists( $uploads['path'] . "/$filename" ) ) {
    if ( '' == "$number$ext" )
    $filename = $filename . ++$number . $ext;
    else
    $filename = str_replace( "$number$ext", ++$number . $ext, $filename );
    }
    $filename = str_replace( $ext, '', $filename );
    $filename = sanitize_title_with_dashes( $filename ) . $ext;
    }

    // Move the file to the uploads dir
    $new_file = $uploads['path'] . "/$filename";
    if ( false === @ move_uploaded_file( $file['tmp_name'], $new_file ) )
    wp_die( printf( __('The uploaded file could not be moved to %s.' ), $uploads['path'] ));

    // Set correct file permissions
    $stat = stat( dirname( $new_file ));
    $perms = $stat['mode'] & 0000666;
    @ chmod( $new_file, $perms );

    // Compute the URL
    $url = $uploads['url'] . "/$filename";

    $return = apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ) );

    return $return;
    }

    ?>

    Вот он этот файл. Вот вроде что то: $wp_filetype =
    А где, может я что то не вижу, где надо изменить?
     
  9. Ejen

    Ejen Постоялец

    Регистр.:
    24 авг 2006
    Сообщения:
    116
    Симпатии:
    24
    там ясно написанно что чекает мумие типы и по ним пропускает, типы лежат в functions.php в сносим те типы которые не нужны.

    function wp_check_filetype($filename, $mimes = null) {
    // Accepted MIME types are set here as PCRE unless provided.
    $mimes = is_array($mimes) ? $mimes : apply_filters('upload_mimes', array (
    'jpg|jpeg|jpe' => 'image/jpeg',
    'gif' => 'image/gif',
    'png' => 'image/png',
    'bmp' => 'image/bmp',
    'tif|tiff' => 'image/tiff',
    'ico' => 'image/x-icon',
    'asf|asx|wax|wmv|wmx' => 'video/asf',
    'avi' => 'video/avi',
    'mov|qt' => 'video/quicktime',
    'mpeg|mpg|mpe' => 'video/mpeg',
    'txt|c|cc|h' => 'text/plain',
    'rtx' => 'text/richtext',
    'css' => 'text/css',
    'htm|html' => 'text/html',
    'mp3|mp4' => 'audio/mpeg',
    'ra|ram' => 'audio/x-realaudio',
    'wav' => 'audio/wav',
    'ogg' => 'audio/ogg',
    'mid|midi' => 'audio/midi',
    'wma' => 'audio/wma',
    'rtf' => 'application/rtf',
    'js' => 'application/javascript',
    'pdf' => 'application/pdf',
    'doc' => 'application/msword',
    'pot|pps|ppt' => 'application/vnd.ms-powerpoint',
    'wri' => 'application/vnd.ms-write',
    'xla|xls|xlt|xlw' => 'application/vnd.ms-excel',
    'mdb' => 'application/vnd.ms-access',
    'mpp' => 'application/vnd.ms-project',
    'swf' => 'application/x-shockwave-flash',
    'class' => 'application/java',
    'tar' => 'application/x-tar',
    'zip' => 'application/zip',
    'gz|gzip' => 'application/x-gzip',
    'exe' => 'application/x-msdownload',
    // openoffice formats
    'odt' => 'application/vnd.oasis.opendocument.text',
    'odp' => 'application/vnd.oasis.opendocument.presentation',
    'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
    'odg' => 'application/vnd.oasis.opendocument.graphics',
    'odc' => 'application/vnd.oasis.opendocument.chart',
    'odb' => 'application/vnd.oasis.opendocument.database',
    'odf' => 'application/vnd.oasis.opendocument.formula',

    ));

    $type = false;
    $ext = false;

    foreach ($mimes as $ext_preg => $mime_match) {
    $ext_preg = '!\.(' . $ext_preg . ')$!i';
    if ( preg_match($ext_preg, $filename, $ext_matches) ) {
    $type = $mime_match;
    $ext = $ext_matches[1];
    break;
    }
    }

    return compact('ext', 'type');
    }
     
  10. chewie

    chewie Создатель

    Регистр.:
    17 ноя 2007
    Сообщения:
    41
    Симпатии:
    1
    Этим ты только запретишь обработку файлов веб-сервером, и то, только апачи, а если, скажем, файл будет инклудиться в скрипт или я встрою шелл в картинку (картинки ты точно не запретишь) ? :)
     
Статус темы:
Закрыта.