/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * The below code uses the @ operator before parse_url() calls because in PHP * 5.3.2 and earlier, parse_url() causes a warning of parsing fails. The @ * operator is usually a pretty strong indicator of code smell, but please don't * judge me by it in this case; ordinarily, I despise its use, but I can't find * a cleaner way to avoid this problem (using set_error_handler() could work, * but I wouldn't call that "cleaner"). Fortunately, Drupal 8 will require at * least PHP 5.3.5, so this mess doesn't have to spread into the D8 branch of * Pathologic. * @see https://drupal.org/node/2104849 * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = @parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $cached_settings = &drupal_static(__FUNCTION__, array()); if (!isset($cached_settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = @parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… // @todo: This is pretty horrible. Can this be simplified? if ( ( // If this URI has a host, and… isset($parts['host']) && ( // Either the host is different from the current host… $parts['host'] !== $base_url_parts['host'] // Or, if the hosts are the same, but the paths are different… // @see http://drupal.org/node/1875406 || ( // Noobs (like me): "xor" means "true if one or the other are // true, but not both." (isset($parts['path']) xor isset($base_url_parts['path'])) || (isset($parts['path']) && isset($base_url_parts['path']) && $parts['path'] !== $base_url_parts['path']) ) ) ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; $cached_settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $cached_settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $cached_settings['current_settings'] = &$cached_settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~ (href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the base path. global $base_path; // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $cached_settings later and not have the changes be "permanent." $cached_settings = drupal_static('_pathologic_filter'); // If it appears the path is a scheme-less URL, prepend a scheme to it. // parse_url() cannot properly parse scheme-less URLs. Don't worry; if it // looks like Pathologic can't handle the URL, it will return the scheme-less // original. // @see https://drupal.org/node/1617944 // @see https://drupal.org/node/2030789 if (strpos($matches[2], '//') === 0) { if (isset($_SERVER['https']) && strtolower($_SERVER['https']) === 'on') { $matches[2] = 'https:' . $matches[2]; } else { $matches[2] = 'http:' . $matches[2]; } } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = @parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE || ( // If there's a scheme part and it doesn't look useful, bail out. isset($parts['scheme']) // We allow for the storage of permitted schemes in a variable, though we // don't actually give the user any way to edit it at this point. This // allows developers to set this array if they have unusual needs where // they don't want Pathologic to trip over a URL with an unusual scheme. // @see http://drupal.org/node/1834308 // "files" and "internal" are for Path Filter compatibility. && !in_array($parts['scheme'], variable_get('pathologic_scheme_whitelist', array('http', 'https', 'files', 'internal'))) ) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. // @todo Should we still try to do path correction on these files too? if (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = @parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $cached_settings['is_file'] = TRUE; } else { $cached_settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($cached_settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } // Is this is a root-relative url (no host) that didn't match above? // Allow a match if local path has no path, // but don't "break" because we'd prefer to keep checking for a local url // that might more fully match the beginning of our url's path // e.g.: if our url is /foo/bar we'll mark this as a match for // http://example.com but want to keep searching and would prefer a match // to http://example.com/foo if that's configured as a local path elseif (!isset($parts['host']) && (!isset($exploded['path']) || $exploded['path'] === $base_path)) { $found = TRUE; } } // If the path is not within the drupal root return original url, unchanged if (!$found) { return $matches[0]; } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. $parts['path'] = ltrim($parts['path'],'/'); // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // If we didn't previously identify this as a file, check to see if the file // exists now that we have the correct path relative to DRUPAL_ROOT if (!$cached_settings['is_file']) { $cached_settings['is_file'] = !empty($parts['path']) && is_file(DRUPAL_ROOT . '/'. $parts['path']); } // Okay, deal with language stuff. if ($cached_settings['is_file']) { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } else { // Let's see if we can split off a language prefix from the path. if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $cached_settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $cached_settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are disabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($cached_settings['is_file'])) { $cached_settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($cached_settings['is_file'] && !$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($cached_settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = @parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $cached_settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return " {$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Пряников П.:«Недобросовестный и нелепый подлог» | КОММУНИСТИЧЕСКАЯ ПАРТИЯ БЕЛАРУСИ

Пряников П.:«Недобросовестный и нелепый подлог»

7 ноября исполнилось 96 лет со дня Октябрьской революции. Все это время (плюс еще несколько месяцев) существует устойчивый миф о финансировании большевиков немцами. Природа этого заблуждения понятна — особенно сегодня, когда оппозиционеры пытаются очернить все то светлое, что было, и навязать свои идеалы и стандарты. За любым действием «политизированной группы лиц» просматриваются злые намерения Запада...

Маленькая, но боевая партия
К началу Октябрьской революции число членов партии большевиков составляло около 80 тысяч человек, тогда как у кадетов было 90 тысяч, у меньшевиков — 150 тысяч, у эсеров — около 700 тысяч членов. Эти цифры служили дополнительным аргументом для тех, кто серьезно относился к «теории заговора»: она состояла в том, что относительно малочисленная партия большевиков, к тому же не имевшая широкой поддержки в народе (22% на выборах в Учредительное собрание против 54% у эсеров), не могла собственными силами совершить революцию.

Была и вторая причина наделять большевиков демоническими силами. При всей относительной малочисленности и небольшой популярности большевики были самой энергичной политической группой в 1917 году, не шедшей ни на какие компромиссы. Летом 1917 года только они отстаивали две идеи — самые популярные среди населения и самые непопулярные среди правительства (меньшевиков, эсеров и кадетов) — о земле и мире. Реализация этих двух главных народных запросов, как считали остальные политические силы того времени (и история доказала их правоту), неизбежно должна была привести к смуте, сепаратизму и бойкоту России со стороны Антанты. А потому Временное правительство приняло решение во что бы то ни стало остановить большевиков.

Временное правительство было демократическим, и для нейтрализации большевиков в июне-июле 1917 года оно приняло меры, которые сегодня назвали бы пиаром: так на свет появилась информация о финансировании РСДРП(б) немецким Генштабом (но нескольких большевиков по обвинению в измене, к примеру Троцкого, все же посадили на короткое время в тюрьму).

Подделка была шита белыми нитками, но тем не менее за нее ухватились конкуренты большевиков по социалистическому движению (эсеры и меньшевики), а позже белые и контрреволюционеры всех мастей. Более того, «документы» о финансировании большевиков немцами и сегодня принимаются всерьез частью политизированных россиян, официальным агитпропом (от телепроповедников до поп-историков) и даже высшим чиновничеством. «Русская планета» решила напомнить, как появилась эта фальсификация.

«Компромат» создали на одной и той же пишущей машинке
Известный английский разведчик Джордж Хилл в автобиографической книге «Моя шпионская жизнь» рассказывает, кто изготовил поддельные документы о финансировании большевиков немцами. Хилл провел в революционной России почти два года, начиная с лета 1917-го. Он был ярым антикоммунистом и участвовал в нескольких заговорах против советской власти. Так что подозревать Хилла в симпатиях к большевикам нет никаких оснований.

Инициатором легенды о том, что большевики, в частности Ленин, были агентами Германии, стал министр вооружений Франции Альбер Тома, а разработчиком и исполнителем — капитан французской разведки Пьер Лоран. Он-то и пропагандировал летом 1917 года идею об использовании немцами большевиков и лично Ленина как «платных германских агентов». В распространении этой информации ему помогал начальник контрразведки Временного правительства Борис Никитин.

В 1918 году в Петрограде Хилл был свидетелем приобретения одним из агентов английской разведки СИС документа, якобы подтверждающего принадлежность Ленина и других советских руководителей к шпионажу в пользу Германии. Сам Хилл вспоминает: «Ленина и Троцкого обвиняли в том, что они являются германскими шпионами. Действительно, было очень странно то обстоятельство, что Россия вела войну с немцами, а Ленину и еще тридцати коммунистам дали возможность проехать германскую территорию в запломбированном вагоне, и он благополучно прибыл на Финляндский вокзал. Когда я был в Петрограде, ко мне подошел наш работник и сказал, что купил за 15 тысяч фунтов стерлингов (150 тысяч рублей золотом) документ, который указывает и подтверждает, что Ленин и Троцкий — немецкие шпионы.

Документ был настолько правдоподобен, что не оставлял никаких сомнений в их виновности. Потом им было получено еще несколько документов, и нигде не было никакой ошибки. Но однажды я взял увеличительное стекло и обнаружил, что везде в этих разных документах русская буква «е» немного не дописана. Я сразу заявил, что это фальшивка. Нашли человека, который фабриковал эти документы, и на допросе он признался в их подделке.

Тогда наш сотрудник из СИС заявил, что не хочет, чтобы британская казна страдала из-за этой ошибки, и мы продали эти документы американцам за 25 тысяч фунтов стерлингов. Американцы распространяли их в колчаковской и деникинской армиях».

Фальшивка получила в исторической литературе название «документы Сиссона» (по имени американского издателя Эдгара Сиссона). В России до сих пор принято ссылаться на многотомные дела правительства Керенского и на созданную им специальную комиссию, якобы установившую факт участия «германского золота» в русской революции.

Комиссия эта действительно была создана, и некоторые факты она установила. Оказалось, что германский генштаб никаких денег на русскую революцию не давал: война поглощала все ресурсы Германии. В действительности же деньги на революцию поступали из Франции, но только не большевикам, а партии эсеров, члены которой входили в состав правительства Керенского. Поэтому следствие было тихо свернуто, а сами дела сданы в архив.

Английский разведчик Хилл рассказывает предысторию «документов Сиссона». В конце октября 1918 года Осведомительное бюро Соединенных Штатов издает брошюру «Германо-большевистский заговор». В ней было помещено около 70 документов, якобы доказывающих, что Ленин и Троцкий были платными агентами германских спецслужб и Вальтера Николаи, главы германской военной разведки. Правда, если бы издатель брошюры хорошо знал структуру высшего военного управления в Германии, он не включил бы эти документы, проданные англичанам, а затем попавшие в руки Сиссона, в книгу как явно фальшивые, так как служба Николаи не занималась политическими акциями. Это была прерогатива политического отдела Генштаба или министерства иностранных дел.

Подкуп большевиков тоже не доказан. В секретном фонде разведывательной службы при Верховном командовании Германии насчитывалось всего 450 тысяч марок, на которые необходимо было содержать разведывательные органы как на Востоке — против России, так и на Западе — против Франции, Англии и Бельгии, а позднее и США. Кто такой Ленин, тоже было неясно. «Я ничего не знал тогда о большевиках, а о Ленине знал только, что это политический эмигрант Ульянов, проживающий в Швейцарии», — писал Николаи в своих мемуарах.

Еще один английский разведчик — Брюс Локкарт — также рассказывал о поддельных документах. «Некоторое время они циркулировали в кругах, связанных с союзническими миссиями в Петрограде. Одна серия «оригиналов» была приобретена американским агентом. Через несколько месяцев обнаружилось, что эти письма, якобы пришедшие из различных мест, таких как Спа, Берлин и Стокгольм, были отпечатаны на одной и той же машинке», — вспоминал он.

Появлением фальшивки были возмущены в Германии. 2 апреля 1919 года газета Deutsche Allgemeine Zeitung от имени Генерального штаба, осведомительного отдела МИД Германии и Госбанка заявила, что изданная американцами брошюра «не что иное, как недобросовестный и нелепый подлог».

Министр Ф.Шейдеман, фамилией которого якобы был подписан один документ, пришел в ярость: «Я заявляю, что письмо это с начала до конца сфальсифицировано; что все события, с которыми это письмо связывает мое имя, мне абсолютно неизвестны».

Что представляют собой «документы Сиссона», было хорошо понятно и президенту Чехословакии Томашу Масарику. Он писал в своих мемуарах: «Не знаю, сколько за них дали американцы, англичане и французы, но сведущему человеку сразу было видно, что наши друзья купили подделку: все документы, которые должны были присылаться из разных государств, были написаны на одной пишущей машинке...»

Был лидер эсеров «немецким шпионом»
Одна из версий, почему эсеро-меньшевистское правительство Керенского летом 1917 года изготовило и стало активно распространять антибольшевистскую фальсификацию, была причастность самих эсеров к немецкому финансированию оппозиции. Таким способом эсеры хотели отвести от себя подозрения.

В начале 1920-х годов очень много говорилось о связи эсеров с немецким Генштабом. В первую очередь речь шла об одном из лидеров эсеров Викторе Чернове (он был первым и последним председателем Учредительного собрания). Расследованием этого дела занимался знаменитый контрразведчик партии эсеров Владимир Бурцев. На эту тему его навел Михаил Первухин — тоже эсер, политэмигрант, проживший в Италии (к середине 1920-х годов на почве антикоммунизма он стал убежденным фашистом, автор «Манифеста русского фашизма»).


Виктор Чернов

В феврале 1921 года Михаил Первухин писал из Рима Владимиру Бурцеву:
«По-видимому, вы стоите на пороге к тому, чтобы раскрыть вторую азефщину, только она будет носить имя „черновщины“. Дело это очень серьезное. Вот я и считаю долгом сообщить вам то, что знаю.
В 1916 году в Риме около меня упорно кружились агенты итальянской политической полиции, стараясь незаметно выпытать сведения о наиболее видных представителях политической эмиграции. Игра была грубая, я держался настороже, и господам этим попользоваться от меня не пришлось. Но еще тогда меня поразило, что явно подосланные полицией люди все эти разговоры сводили к двум лицам: некоему Равенгофу, которого русская колония считала за „охранника“ и который уже при Керенском был арестован в Париже по подозрению в шпионстве в пользу Германии, и о Викторе Чернове.

«Из обмолвок итальянцев-журналистов, если не состоящих в полиции, то все же якшающихся с нею, я убедился, что еще с весны 1915 года у итальянцев было убеждение, что Чернов является агентом Германии. За ним была установлена самая бдительная слежка, и именно не как за русским революционером, а как за германским агентом. Когда Чернов с Ривьеры переехал в Швейцарию, где и занялся пораженческою пропагандой, то и там за ним следили итальянские агенты, чтобы «осветить» лиц, входивших с ним в контакт и потом пробиравшихся в Италию.

Достаточно было считаться знакомым Чернова, чтобы попасть под подозрение в качестве немецкого шпиона. Из-за родства с Черновым под это тяжкое подозрение попал честнейший человек, молодой медик Александр Филипченко, живший в Риме; и полиция следила за каждым его шагом.

Не мне судить, насколько обоснованными являются эти итальянские подозрения. Но они существовали, и даже больше — речь идет не о «подозрениях», а об «уверенности»».

Впрочем, в это смутное время все политические силы России не гнушались иностранной помощи. Как признавалась один из лидеров эсеровской партии Е. К. Брешко-Брешковская в декабре 1917 года, финансовые вливания из США в партию эсеров составили около $ 2 млн. Эта помощь была оказана в расчете на то, что эсеры развернут широкомасштабную антибольшевистскую агитацию. На немецкие деньги в 1917—1918 и на английские в 1919—1921 годах жили грузинские меньшевики. В Гражданскую войну армии белых открыто финансировались Антантой. Возможно, подпиткой большевиков тоже занимались какие-то иностранные силы, но документы, которые приводят в доказательство этому, — все же грубая подделка.

Автор: 
Павел ПРЯНИКОВ
Номер газеты: 

Добавить комментарий

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
3 + 10 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.