Будь-який пошук вразливостей на веб-ресурсах починається з розвідки та збору інформації.
Розвідка може бути як активною – брутфорс файлів та директорій сайту, запуск сканерів уразливостей, ручний перегляд сайту, так і пасивною – пошук інформації в різних пошукових системах. Іноді буває так, що вразливість стає відомою ще до відкриття першої сторінки сайту.
Як таке можливо?
Пошукові роботи, які безперервно блукають по просторах інтернету, крім інформації, корисної звичайному користувачеві, часто фіксують те, що може бути використане зловмисниками при атаці на веб-ресурс. Наприклад, помилки скриптів та файли з чутливою інформацією (починаючи від конфігураційних файлів та логів, закінчуючи файлами з автентифікаційними даними та бекапами баз даних).
З погляду пошукового робота повідомлення про помилку виконання SQL-запиту - це звичайний текст, невіддільний, наприклад, від опису товарів на сторінці. Якщо раптом пошуковий робот натрапив на файл з розширенням.sql, який чомусь опинився в робочій папці сайту, то він буде сприйнятий як частина вмісту сайту і так само буде проіндексований (включаючи, можливо, вказані паролі).
Подібну інформацію можна знайти, знаючи стійкі, часто унікальні ключові слова, які допомагають відокремити «вразливі сторінки» від сторінок, що не містять вразливості.
Величезна база спеціальних запитів із використанням ключових слів (так званих дорків) існує на exploit-db.com і відома під назвою Google Hack Database.
Чому google?
Дорки орієнтовані в першу чергу на Google з двох причин:
− найбільш гнучкий синтаксис ключових слів (наведений у Таблиці 1) та спеціальних символів (наведений у Таблиці 2);
− індекс google все ж таки більш повний, ніж у інших пошукових систем;
Таблиця 1 – Основні ключові слова google
Ключове слово |
Сенс |
Приклад |
site |
Пошук лише на вказаному сайті. Враховує лише url |
site:somesite.ru - знайде всі сторінки по даному домену та піддоменам |
inurl |
Пошук за словами, присутнім у uri. На відміну від кл. слова “site”, шукає збіги після імені сайту |
inurl:news - знайде всі сторінки, де в uri зустрінеться це слово |
intext |
Пошук у тілі сторінки |
intext:"пробки" - повністю аналогічно звичайному запиту "пробки" |
intitle |
Пошук у заголовку сторінки. Текст, укладений між тегами |
intitle:"index of" - знайде всі сторінки з лістингом директорії |
ext |
Пошук сторінок із зазначеним розширенням |
ext:pdf - знайде всі PDF-файли |
filetype |
В даний час повністю аналогічно кл. слову "ext" |
filetype:pdf - аналогічно |
related |
Пошук сайтів зі схожою тематикою |
related:google.ru - покаже свої аналоги |
link |
Пошук сайтів, що посилаються на цей |
link:somesite.ru - знайде всі сайти, на яких є посилання на даний |
define |
Показати визначення слова |
define:0day - визначення терміна |
cache |
Показати вміст сторінки в кеші (якщо є) |
cache:google.com - відкриє сторінку з кешу |
Таблиця 2 – Спеціальні символи запитів Google
Символ |
Сенс |
Приклад |
“ |
Точна фраза |
intitle:«RouterOS router configuration page» - пошук роутерів |
* |
Будь-який текст |
inurl:«bitrix*mcart» - пошук сайтів на bitrix з вразливим модулем mcart |
. |
Будь-який символ |
Index.of - аналогічно до запиту index of |
- |
Виключити слово |
error -warning - показати всі сторінки, де є error, але ні warning |
.. |
Діапазон |
cve 2006..2016 - показати вразливості за роками починаючи з 2006 |
| |
Логічне «або» |
linux | windows - показати сторінки, де зустрічається або перше або друге слово |
Варто розуміти, що будь-який запит до пошукової системи – це пошук лише за словами.
Марно шукати на сторінці мета-символи (лапки, дужки, знаки пунктуації тощо). Навіть пошук за точною фразою, вказаною в лапках, - це пошук за словами, з подальшим пошуком точного збігу вже в результатах.
Усі доріжки Google Hack Database розділені логічно на 14 категорій та представлені в таблиці 3.
Таблиця 3 – Категорії Google Hack Database
Категорія |
Що дозволяє знайти |
Приклад |
Footholds |
Веб-шелли, публічні файлові менеджери |
Знайти всі зламані сайти, де залиті перераховані вебшелли: (intitle:«phpshell» OR intitle:«c99shell» OR intitle:«r57shell» OR intitle:«PHP Shell » OR intitle:«phpRemoteView») `rwx` "uname" |
Files containing usernames |
Файли реєстру, файли конфігурації, логи, файли, що містять історію введених команд |
Знайти всі файли реєстру, які містять інформацію про облікові записи: filetype:reg reg +intext:«internet account manager» |
Sensitive Directories |
Каталоги з різною інформацією (особисті документи, конфіги vpn, приховані репозиторії та ін.) |
Знайти всі лістинги директорій, що містять файли, що відносяться до vpn: "Config" intitle:"Index of" intext:vpn Сайти, що містять git-репозиторії: (intext: "index of /.git") ("parent directory") |
Web Server Detection |
Версію та іншу інформацію про веб-сервер |
Знайти адміністративні консолі сервера JBoss: inurl:"/web-console/" intitle:«Administration Console» |
Vulnerable Files |
Скрипти, що містять відомі вразливості |
Знайти сайти, які використовують скрипт, що дозволяє вивантажити довільний файл із сервера: allinurl:forcedownload.php?file= |
Vulnerable Servers |
Інсталяційні скрипти, веб-шелли, відкриті адміністративні консолі тощо |
Знайти відкриті PHPMyAdmin консолі, запущені від root: intitle:phpMyAdmin "Welcome to phpMyAdmin ***" "running on * as root@*" |
Error Messages |
Різні помилки та попередження, що часто розкривають важливу інформацію - починаючи від версії CMS до паролів |
Сайти, що мають помилки у виконанні SQL-запитів до бази: "Warning: mysql_query()" "invalid query" |
Files containing juicy info |
Сертифікати, бекапи, електронні листи, логи, SQL-скрипти і т.д. |
Знайти ініціалізаційні sql-скрипти: filetype:sql та «insert into» -site:github.com |
Files containing passwords |
Все, що може містити паролі - логи, sql-скрипти і т.д. |
Логи, що згадують паролі: filetype:logintext:password |pass |pw sql-скрипти, що містять паролі: ext:sqlintext:usernameintext:password |
Sensitive Online Shopping Info |
Інформація пов'язана з онлайн покупками |
Знайти пінкоди: dcid=bn=pincode= |
Network or vulnerability data |
Інформацію, що не відноситься безпосередньо до веб-ресурсу, але що стосується мережі або інші не веб-сервіси |
Знайти скрипти автоматичного налаштування проксі, що містять інформацію про внутрішню мережу: inurl:прокси | inurl:wpad ext:pac | ext:dat findproxyforurl |
Pages containing login portals |
Сторінки, що містять форми входу |
Веб-сторінки saplogon: intext:«2016 SAP AG. All rights reserved.» intitle:«Logon» |
Various Online Devices |
Принтери, роутери, системи моніторингу та ін. |
Знайти конфігураційну панель принтера: intitle:"hplaserjet"inurl:SSI/Auth/set_config_deviceinfo.htm |
Advisories and Vulnerabilities |
Сайти на вразливих версіях CMS |
Знайти вразливі плагіни, через які можна завантажити довільний файл на сервер: inurl:fckeditor -intext:«ConfigIsEnabled = False» intext:ConfigIsEnabled |
Дорки найчастіше орієнтовані на пошук по всіх сайтах мережі інтернет. Але ні що не заважає обмежити область пошуку на якомусь сайті або сайтах.
Кожен запит до Google можна зосередити на певному сайті, додавши до запиту ключове слово "site:somesite.com". Дане ключове слово може бути дописане до будь-якого доріка.
Автоматизація пошуку вразливостей
Так народилася ідея написати просту утиліту, що автоматизує пошук вразливостей за допомогою пошукової системи (google) і спирається на Google Hack Database.
Утиліта є скриптом, написаним на nodejs з використанням phantomjs. Якщо бути точним, то скрипт інтерпретується самим фантомами.
Phantomjs - це повноцінний веб-браузер без графічного інтерфейсу, що керується за допомогою js-коду і володіє зручним API.
Утиліта отримала цілком зрозумілу назву – dorks. Запустивши її в командному рядку (без опцій) отримуємо коротку довідку з кількома прикладами використання:
Рисунок 1 - Список основних опцій dorks
Загальний синтаксис утиліти: dork команда список опцій.
Детальний опис усіх опцій представлений у таблиці 4.
Таблиця 4 – Синтаксис dorks
Команда |
Опція |
Опис |
ghdb |
-l |
Вивести нумерований список категорій дорків Google Hack Database |
-c «номер або назва категорії» |
Завантажити доріжки вказаної категорії за номером або назвою |
|
-q «фраза» |
Завантажити дорки, знайдені за запитом |
|
-o "файл" |
Зберегти результат у файл (тільки з опціями -c|-q) |
|
google |
-d «дорк» |
Вказати довільний дорк (опція може використовуватися багато разів, допускається поєднання з опцією -D) |
-D "файл" |
Використовувати доріжки з файлу |
|
-s «сайт» |
Задати сайт (опція може використовуватись багато разів, допускається поєднання з опцією -S) |
|
-S "файл" |
Використовувати сайти з файлу (перебір дорків буде виконаний по кожному сайту незалежно) |
|
-f "фільтр" |
Задати додаткові ключові слова (буде додано до кожного дорка) |
|
-t «кількість мс» |
Інтервал між запитами до Google |
|
-T «кількість мс» |
Таймаут, якщо зустрілася каптча |
|
-o "файл" |
Зберегти результат у файл (будуть збережені тільки ті доріжки, за якими щось знайшлося) |
За допомогою команди ghdb можна отримати всі доркі з exploit-db за довільним запитом, або вказати всю категорію. Якщо вказати категорію 0 - то буде вивантажено всю базу (близько 4.5 тисяч дорків).
Список категорій, доступних на даний момент, представлений на малюнку 2.
Малюнок 2 - Список доступних категорій дорків GHDB
Командою google буде проведена підстановка кожного доріка в пошуковик google і проаналізовано результат щодо збігів. Дорки за якими щось знайшлося буде збережено у файл.
Утиліта підтримує різні режими пошуку:
1 дорк та 1 сайт;
1 дорк та багато сайтів;
1 сайт та багато дорків;
багато сайтів та багато дорків;
Список дорків та сайтів можна задати як через аргумент, так і через файл.
Демонстрація роботи
Спробуємо пошукати будь-які вразливості на прикладі пошуку повідомлень про помилки. За командою: dorks ghdb –c 7 –o errors.dorks будуть завантажені всі відомі доркі категорії “Error Messages” як показано на малюнку 3.
Рисунок 3 – Завантаження всіх відомих дорків категорії “Error Messages”
Дорки завантажені та збережені у файл. Тепер залишається «натруїти» їх на якийсь сайт (див. рис. 4).
Рисунок 4 – Пошук вразливостей сайту, що цікавиться, в кеші google
Через деякий час на досліджуваному сайті виявляється кілька сторінок, які містять помилки (див. рис. 5).
Рисунок 5 – Знайдені повідомлення про помилки
Підсумок у файлі result.txt отримуємо повний список доріжок, що призводять до появи помилки.
На малюнку 6 наведено результат пошуку помилок сайту.
Рисунок 6 – Результат пошуку помилок
У кеші по даному доріжку виводиться повний бектрейс, що розкривають абсолютні шляхи скриптів, систему управління вмістом сайту та тип бази даних (див. рис. 7).
Рисунок 7 – розкриття інформації про влаштування сайту
Проте варто враховувати, що не всі доркі з GHDB дають справжній результат. Також google може не знайти точного збігу і показати схожий результат.
У такому разі розумніше використовувати свій персональний список дорків. Наприклад, завжди варто пошукати файли з «незвичайними» розширеннями, приклади яких наведено малюнку 8.
Рисунок 8 – Список розширень файлів, не характерних для звичайного веб-ресурсу
У результаті, за командою dorks google –D extensions.txt –f банк, з першого запиту google починає віддавати сайти з «незвичайними» розширеннями файлів (див. малюнок 9).
Рисунок 9 – Пошук «нехороших» типів файлів на сайтах банківської тематики
Варто мати на увазі, що Google не приймає запити довші 32 слів.
За допомогою команди dorks google –d intext:”error|warning|notice|syntax” –f університет
можна знайти помилки інтерпретатора PHP на сайтах навчальної тематики (див. малюнок 10).
Рисунок 10 – Пошук PHP-помилок часу виконання
Іноді користуватися якоюсь однією або двома категоріями дорків не зручно.
Наприклад, якщо відомо, що сайт працює на движку wordpress, то потрібні доріжки саме по wordpress. У такому випадку зручно користуватися пошуком Google Hack Database. Команда dorks ghdb –q wordpress –o wordpress_dorks.txt завантажить усі доріжки за Wordpress, як показано на малюнку 11:
Рисунок 11 – Пошук доріжок, що стосуються Wordpress
Знову повернемося до банків та командою dorks google –D wordpress_dords.txt –f банк спробуємо знайти щось цікаве, пов'язане з wordpress (див. малюнок 12).
Рисунок 12 – Пошук вразливостей Wordpress
Варто зауважити, що пошук на Google Hack Database не сприймає слова коротше 4 символів. Наприклад, якщо CMS сайту не відома, але відома мова – PHP. У такому разі можна відфільтрувати потрібне вручну за допомогою пайпа та системної утиліти пошуку dorks –c all | findstr /I php > php_dorks.txt (див. рисунок 13):
Рисунок 13 – Пошук по всіх доріг, де є згадка PHP
Пошук вразливостей або якоїсь чутливої інформації в пошуковій системі слід шукати тільки якщо по даному сайту є значний індекс. Наприклад, якщо у сайту проіндексовано 10-15 сторінок, то безглуздо щось шукати подібним чином. Перевірити розмір індексу просто – достатньо ввести в рядок пошуку google «site:somesite.com». Приклад сайту з недостатнім індексом показано на малюнку 14.
Рисунок 14 – Перевірка розміру індексу сайту
Тепер про неприємне ... Періодично google може запросити каптчу - тут нічого не вдієш - її доведеться ввести. Наприклад, у мене, при переборі категорії «Error Messages» (90 дорків) каптча випала лише один раз.
Варто додати, що phantomjs підтримує роботу так само через проксі, як через http, так і через socks інтерфейс. Для включення режиму проксі потрібно розкоментувати відповідний рядок dorks.bat або dorks.sh.
Інструмент доступний у вигляді вихідного коду
Пошукові оператори (спеціальні символи, які додають до пошукового запиту) допомагають отримати величезну кількість корисної інформації про сайт. З їхньою допомогою можна істотно звузити діапазон пошуку та знайти потрібну інформацію. Здебільшого, оператори у різних пошукових системах збігаються, але й відмінності. Тому розглянемо оператори для Google та Яндекс окремо.
Оператори Google
Розглянемо для початку найпростіші оператори:
+ - оператор «плюс» використовується для знаходження слів в одному реченні, просто вставте цей символ між словами. Наприклад, зробивши запит типу «зимові + шини + для + ніссан», ви отримаєте у видачі ті сайти, в яких є пропозиції з повним набором всіх слів із запиту.
- - оператор «мінус» допоможе виключити із запиту небажані слова. Наприклад, якщо зробити запит «Хрещений батько-онлайн», то вам видадуть сайти з інформацією про фільм, огляд, рецензію і т.д., але виключать сайти з онлайн переглядом.
.. - Допоможе для пошуку результатів, що містять числа у зазначеному діапазоні.
@ і #- символи для пошуку за тегами та хештегами соціальних мереж.
OR- оператор «або», з його допомогою можна знайти сторінки, на яких зустрічається хоча б одне з кількох слів.
« » - лапки повідомляють пошукачу, що вам необхідно знайти сайти, де введені слова знаходяться у вказаному порядку - точне входження.
Складні оператори:
site:допоможе знайти потрібну інформацію на конкретному сайті.
cache:корисний оператор, якщо вміст будь-якої сторінки змінився або був заблокований. Покаже кешовану версію. Приклад: cache:сайт
info:служить для показу всієї інформації адресу.
related:чудовий оператор для пошуку сайтів зі схожим контентом.
allintitle:виводяться сторінки, у яких у тезі title присутні зазначені у запиті слова
allinurl:чудовий оператор, за допомогою якого можна знайти справді потрібні сторінки. Показує сайти, що містять в адресі сторінки вказані слова. На жаль, все ще мало сайтів у російському сегменті інтернету використовують кирилицю, тому доведеться використовувати або транслітерацію, наприклад, allinurl: steklopakety, або латиницю.
inurl:робить те саме, що і оператор вище, але відбір відбувається тільки для одного слова.
allintext:Вибірка сторінок здійснюється саме за вмістом сторінки. Може бути корисно, якщо ви шукаєте якусь інформацію, але адресу сайту просто забули.
intext:теж тільки для одного слова.
allinanchor:оператор показує сторінки, які мають в описі ключові слова. Наприклад: allinanchor: годинник наручний.
inanchor:теж саме по одному ключовому слову.
Оператори Яндекс
Прості оператори:
! - ставиться перед ключовим словом і в результатах пошуку видаються сторінки, де вказано таке саме слово (без змін словоформи).
+ - так само як і Google, відображаються сторінки з усіма словами, вказаними між плюсом.
« » - Вказує точне збіг фрази.
() - використовується для угруповання слів у складних запитах.
& - необхідний пошуку сторінок, у яких слова, об'єднані даним оператором, зустрічаються у одному реченні.
* - служить для пошуку пропущених слів у цитатах. Наприклад: Росія – душа. Один оператор замінює одне слово.
Наступні оператори вже вбудовані в розширений пошук Яндекса, тому запам'ятовувати їх немає сенсу, але все ж таки ми пояснимо, що кожен з них робить.
title:пошук за заголовками сторінок сайтів
url:пошук за сторінками, розміщеними за заданою адресою, наприклад url:сайт/blog/*
host:здійснює пошук по всьому хосту.
site:тут пошук проводиться вже по всіх піддоменах та сторінках сайту.
inurl:пошук по сторінках тільки цього домену із застосуванням ключових слів. Наприклад, inurl:сайт блог
mime:пошук документів заданого типу, наприклад, mime:xls.
cat:пошук по сайтам, які присутні в Яндекс.Каталогу, а також регіон та рубрика яких збігається із заданим. Наприклад: автомобіль cat:ID_категорії
Ось як ці оператори виглядають у самій пошуковій системі:
Таким чином, правильно підбираючи та використовуючи оператори пошукових систем Google та Яндекс, ви можете самостійно скласти семантичне ядро для сайту, знайти недоліки та помилки в роботі, зробити аналіз конкурентів, а також дізнатися – звідки та які зовнішні посилання йдуть на ваш сайт.
Якщо ви використовуєте в роботі ще якісь оператори, які ми не врахували, поділіться у коментарях. Обговоримо =)
Спадкування - це механізм об'єктно орієнтованого програмування, що дозволяє описати новий клас на основі вже існуючого (батьківського).
Клас, що виходить у результаті успадкування від іншого, називається підкласом. Цей зв'язок зазвичай описують за допомогою термінів «батьківський» та «дочірній». Дочірній клас походить від батьківського і успадковує його характеристики: властивості та методи. Зазвичай, у підкласі до функціональності батьківського класу (який також називають суперкласом) додаються нові функціональні можливості.
Щоб створити підклас, необхідно використовувати в оголошенні класу ключове слово extends і після нього вказати ім'я класу, від якого виконується спадкування:
age = $ age; ) function add_age () ( $this->age++; ) ) // оголошуємо успадкований клас class my_Cat extends Cat ( // визначаємо власний метод підкласу function sleep() ( echo "
Zzzzz..."; ) ) $kitty = new my_Cat(10); // викликаємо успадкований метод $kitty->add_age(); // зчитуємо значення успадкованої властивості echo $kitty->age; // викликаємо власний метод підкласу $ kitty->sleep(); ?>
Підклас успадковує доступ всім методам і властивостям батьківського класу, оскільки вони мають тип public . Це означає, що для екземплярів класу my_Cat ми можемо викликати метод add_age() і звертатися до властивості $age, незважаючи на те, що вони визначені в класі cat . Також у наведеному прикладі підклас немає свого конструктора. Якщо в підкласі не оголошено свого конструктора, то при створенні екземплярів підкласу автоматично викликатиметься конструктор суперкласу.
У підкласах можуть перевизначатися властивості та методи. Визначаючи підклас, ми гарантуємо, що його екземпляр визначається характеристиками спочатку дочірнього, та був батьківського класу. Щоб краще це зрозуміти, розглянемо приклад:
age"; ) ) class my_Cat extends Cat ( public $age = 10; ) $kitty = new my_Cat; $kitty->foo(); ?>
При виклик $kitty->foo() інтерпретатор PHP не може знайти такий метод у класі my_Cat , тому використовується реалізація цього методу задана в класі Cat . Однак у підкласі визначено власну властивість $age, тому при зверненні до нього методом $kitty->foo() , інтерпретатор PHP знаходить цю властивість у класі my_Cat і використовує його.
Так як ми вже розглянули тему про вказівку типу аргументів, залишилося сказати про те, що якщо в якості типу вказано батьківський клас, то всі нащадки для методу будуть доступні для використання, подивіться на наступний приклад:
foo(new my_Cat); ?>
Ми можемо поводитися з екземпляром класу my_Cat так, начебто це об'єкт типу Cat, тобто. ми можемо передати об'єкт типу my_Cat методу foo() класу Cat, і все буде працювати як треба.
Оператор parent
Насправді підкласам буває необхідно розширити функціональність методів батьківського класу. Розширюючи функціональність за рахунок перевизначення методів суперкласу, у підкласах ви зберігаєте можливість спочатку виконати програмний код батьківського класу, а потім додати код, що реалізує додаткову функціональність. Давайте розберемо, як це можна зробити.
Щоб викликати потрібний метод із батьківського класу, вам знадобиться звернутися до цього класу через дескриптор. Для цього в PHP передбачено ключове слово parent . Оператор parent дозволяє підкласам звертатися до методів (і конструкторів) батьківського класу та доповнювати їхню існуючу функціональність. Щоб звернутися до методу в контексті класу, використовуються символи "::" (Дві двокрапки). Синтаксис оператора parent:
Parent::метод_батьківського_класу
Ця конструкція викликає метод, визначений у суперкласі. Після такого виклику можна помістити свій програмний код, який додасть нову функціональність:
title = $title; $this->price = $price; ) ) class new_book extends book ( public $pages; function __construct($title, $price, $pages) ( // викликаємо метод-конструктор батьківського класу parent::__construct($title, $price); // ініціалізуємо властивість визначену в підкласі $this->pages = $pages;)) $obj = new new_book("азбука", 35, 500); echo "Книга: $obj->title
Ціна: $obj->price
Сторінок: $obj->pages"; ?>
Коли в дочірньому класі визначається свій конструктор, PHP не викликає конструктора батьківського класу автоматично. Це необхідно зробити вручну у конструкторі підкласу. Підклас спочатку у своєму конструкторі викликає конструктор свого батьківського класу, передаючи потрібні аргументи для ініціалізації, виконує його, а потім виконується код, який реалізує додаткову функціональність, у цьому випадку ініціалізує якість підкласу.
Ключове слово parent можна використовувати не тільки в конструкторах, але і в будь-якому іншому методі, функціональність якого ви хочете розширити, досягти цього можна, викликавши метод батьківського класу:
name)."; return $str; ) ) class my_Cat extends Cat ( public $age = 5; function getstr() ( $str = parent::getstr(); $str .= "
Вік: ($this->age) років."; return $str; ) ) $obj = new my_Cat; echo $obj->getstr(); ?>
Тут спочатку викликається метод getstr() із суперкласу, значення якого присвоюється змінною, а після цього виконується решта коду визначеного в методі підкласу.
Тепер, коли ми познайомилися з основами успадкування, можна розглянути питання видимості властивостей і методів.
public, protected та private: управління доступом
До цього моменту ми явно оголошували всі властивості, як public (загальнодоступні). І такий тип доступу заданий за промовчанням всім методів.
Елементи класу можна оголошувати як public (загальнодоступні), protected (захищені) та private (закриті). Розглянемо різницю між ними:
- До public(загальнодоступним) властивостям та методам можна отримати доступ з будь-якого контексту.
- До protected(захищеним) властивостям і методам можна отримати доступ або з класу, що містить їх, або з його підкласу. Ніякому зовнішньому коду доступу до них не надається.
- Ви можете зробити дані класу недоступними для виклику за допомогою ключового слова private(закриті). До таких властивостей і методів можна отримати доступ тільки з класу, в якому вони оголошені. Навіть підкласи цього класу не мають доступу до таких даних.
public - відкритий доступ:
hello"; ) ) $obj = new human; // доступ із зухвалої програми echo "$obj->age"; // Допустимо $obj->say(); // Допустимо?>private - доступ лише з методів класу:
age"; ) ) $obj = new human; // безпосередньо з викликаючої програми доступу до закритих даних немає echo "$obj->age"; // Помилка! доступ закритий! // проте за допомогою методу можна виводити закриті дані $obj ->say(); // Допустимо?>protected - захищений доступ:
Модифікатор protected з погляду викликає програми виглядає так само, як і private: він забороняє доступ до даних об'єкта ззовні. Однак, на відміну від private, він дозволяє звертатися до даних не тільки з методів свого класу, але також і з методів підкласу.
Ця стаття буде в першу чергу корисна оптимізаторам-початківцям, тому що більш просунуті і так повинні знати про них усі. Щоб використати цю статтю з максимальною ефективністю, бажано точно знати, які слова необхідно підняти на потрібні позиції. Якщо ви ще точно не впевнені в списку слів, або скористайтеся сервісом підказки ключових слів, він трохи заплутаний, але можна розібратися.
Важливо! Будьте впевнені, Google чудово розуміє, що звичайні користувачі не будуть ними користуватися і лише фахівці з просування вдаються до їхньої допомоги. Тому Google може трохи спотворювати інформацію, що надається.
Оператор Intitle:
Використання: intitle:слово
Приклад: intitle:розкрутка сайту
Опис:При використанні цього оператора ви отримаєте список сторінок, в заголовку (title) яких є слово, що вас цікавить, у нашому випадку це фраза «розкрутка сайту» повністю. Після двокрапки не повинно бути пробілу. Заголовок сторінки має важливе значення при ранжируванні, тому поставтеся до складання заголовків з усією відповідальністю. При використанні цієї змінної ви зможете оцінити приблизно кількість конкурентів, які так само хочуть бути на лідируючих позиціях за цим словом.
Оператор Inurl:
Використання: inurl:фраза
Приклад: inurl:розрахунок вартості пошукової оптимізації
Опис:Ця команда показує сайти або сторінки, які мають вихідне ключове слово в URL-адресі. Після двокрапки не повинно бути пробілу.
Оператор Inanchor:
Використання: inanchor:фраза
Приклад: inanchor:seo книги
Опис:Використання цього оператора допоможе вам побачити сторінки, на які є посилання з ключовим словом. Це дуже важлива команда, але, на жаль, пошукові системи неохоче діляться цією інформацією з оптимізаторами з очевидних причин. Є послуги, Linkscape and Majestic SEO, які готові надати вам цю інформацію за певну плату, але будьте впевнені, інформація того варта.
Також варто пам'ятати, що зараз Google все більше уваги приділяє «трастовості» сайту і все менше масі посилань. Безумовно, посилання все ще один із найважливіших факторів, але «трастовість» відіграє все більшу роль.
Непогані результати дає комбінація двох змінних, наприклад intitle: просування inanchor: розкрутка сайту. І що ж ми бачимо, пошукова система покаже нам основних конкурентів, у заголовку сторінки яких міститься слово «просування» та посилання, що входять з анкором «розкрутка сайту».
На жаль, дана комбінація не дозволяє дізнатися про «трастовість» домену, яка, як ми вже говорили, є дуже важливим фактором. Наприклад, багато старих корпоративних сайтів не мають такої кількості посилань, як їхні молоді конкуренти, але вони мають багато старих посилань, які витягують ці сайти на вершину пошукової видачі.
Оператор Site:
Використання: site:адреса сайту
Приклад: site:www.aweb.com.ua
Опис:За допомогою цієї команди ви можете побачити список сторінок, які проіндексовані пошуковою системою та про які вона знає. Застосовується в основному для того, щоб дізнатися про сторінки конкурентів та проаналізувати їх.
Оператор Cache:
Використання: cache:адреса сторінки
Приклад: cache:www.aweb.com.ua
Опис:Ця команда показує "знімок" сторінки з того моменту, коли робот заходив на сайт останній раз і взагалі, як він бачить вміст сторінки. Перевіряючи дату кешу сторінки, можна визначити, як часто роботи заходять на сайт. Чим авторитетніший сайт, тим частіше роботи на нього заходять і відповідно, чим менш авторитетний (на думку Google) сайт, тим рідше роботи роблять знімки сторінки.
Кеш дуже важливий при покупці посилань. Чим ближче дата кешування сторінки до дати покупки посилання – тим швидше ваше посилання буде проіндексовано пошуковою системою Google. Іноді виходило знаходити сторінки з віком кешу в 3 місяці. Купивши посилання на такому сайті, ви даремно витратите свої кошти, адже цілком можливо, що посилання ніколи не буде проіндексоване.
Оператор Link:
Використання: link:url
Приклад: link:www.aweb.com.ua
Опис:Оператор link: шукає та показує сторінки, які посилаються на вказану адресу url. Це може бути як домашня сторінка сайту, так і внутрішня.
Оператор Related:
Використання: related:url
Приклад: related:www.aweb.com.ua
Опис:Оператор related: виводить сторінки, які, на думку пошукової системи, схожі на вказану сторінку. Для людини всі отримані сторінки можуть не мати нічого схожого, але для пошукової системи це так.
Оператор Info:
Використання: info:url
Приклад: info:www.aweb.com.ua
Опис:При використанні цього оператора ми зможемо отримати інформацію про сторінку, яка відома пошуковій системі. Це може бути автор, дата публікації та багато іншого. Додатково на сторінці пошуку Google пропонує відразу кілька дій, які він може зробити з цією сторінкою. Або, простіше, він запропонує використовувати деякі оператори, які ми описали вище.
Оператор Allintitle:
Використання: allintitle: фраза
Приклад: allintitle:розкрутка aweb
Опис:Якщо ми розпочнемо пошуковий запит із цього слова, ми отримаємо список сторінок, у заголовку яких є вся фраза. Наприклад, якщо спробуємо пошукати слово allintitle:розкрутка aweb, то отримаємо список сторінок, у заголовку яких згадуються ці обидва слова. І зовсім не обов'язково вони повинні йти один за одним, вони можуть розташовуватися у різних місцях заголовка.
Оператор Allintext:
Використання: allintext:слово
Приклад: allintext:оптимізація
Опис:Цей оператор шукає всі сторінки, в тексті яких є зазначене слово. Якщо ми спробуємо використати allintext:оптимізація aweb, то побачимо список сторінок, у тексті яких зустрічаються ці слова. Тобто, не вся фраза цілком «оптимізація aweb», а обидва слова та «оптимізація» та «aweb».