Post_1sПривіт в сьогоднішній публікації буде розміщена інформація про ще одну проблему безпеки, які часто зустрічаються в РНР проектах.

А саме як захиститись від Cross Site Scripting, а також про таке поняття як зовнішній файл РНР—документів.

Як правило, файл або сторінки РНР закінчуються розширенням .php і відправляються РНР веб–серверу Apache. В такому випадку код РНР не буде видний або даступний для користувача.

Зовнішній файл РНР–документа.

Код скритий і це одна із основних особливостей язиків програмування  server–side scripting, яким і являється РНР. Проте може виникнути така ситуація , що модуль РНР або Apache можуть дати збій. І тоді код відобразиться на екрані.

Для безпеки додатків РНР це явно не бажана ситуація. По–перше якщо вихідний код видимий, то дуже просто знайти уязвиме місце в безпеці додатків РНР.

Крім того деякі скрипти містять файли конфігурації навіть в корні веб–сервера. Це небезпечна ситуація, якщо взяти до уваги такий факт, що відвідувач, введе в браузер адресу сервера РНР і імя файлу конфігурації ( по замовчуванню php.ini) здатен надати доступ до даного файлу через інтернет–браузер.

Звичайно виникає питання, що необхідно для цього зробити, щоб зробити сервер РНР безпечнішим. Все досить просто, заключається в способі розташування файлів РНР. Так як в попередніх публікаціях говорилось що всі документи із “кореня документа” РНР можуть відображатись через браузер і можуть бути доступні відвідувачам, нам необхідно всього навсього перемістити всі ці документи в інші місця.

Нижче наведений фрагмент РНР, включений в файл конфігурації РНР, який звузить доступ відвідувачу.

/aplication

/controlers

/models

/views

/library

/public_html <– document root

/index.php

/media

/images

/javascript

/css

/config

/cache

/tmp

/public_index.php

/logs

Розташувавши файли таким чином ми можемо бути впевнені, ми можемо бути впевнені що відвідувачеві будуть доступні тільки положені файли.

Cross Site Scripting 

Cross Site Scripting інколи називають XSS, являється ще одною проблемою безпеки, яка часто зустрічається в РНР–проектах. Ця проблема виникає, коли вміст, введений користувачем, використовується додатком для того щоб знову відобразитись на екрані.

Найчастіше  Cross Site Scripting працює тоді, коли в коді HTML представлений JavaScript.

Приклад

Візьмемо собі для прикладу форум. На форумі користувачі можуть відсилати повідомлення, які можуть бачити інші користувачі. В якості технології нам необхідно застосувати JavaScript для того щоб надіслати повідомлення, і  HTML для того щоб надати їм форму, і відформатувати їх.

Проблема являється в тому, що навіть якщо правильний сценарій, то для його реалізації необхідно забезпечити безпеку. Так як потрібно мати на увазі що серед користувачів можуть бути люди з злими намірами, хакери або компютерні ентузіасти, які захочуть використовувати різні дефекти в безпеці форому.

Одна із шкідливих речей які вони можуть зробити, це ввести JavaScript в даний РНР код.

Результат може відштовхнути користувача даного сайту. Даний спосіб дозволяє наприкла створити незручності відвідувачам форуму шляхом генерування безкінцевого повідомлення, щоб користувач закрив сторінку і пішов на інший веб–сайт.

Даний приклад — це простий випадок, коли розглянута атака невредоносна. Але при намірі зловмисників це може бути надзвичайно недобре, бо може привести до встановки keylogger (англ. key – “клавіша” logger “регістраційний пристрій”) — програма або апаратний пристрій, який регіструє кожну нажату клавішу на клавіатурі компютера.

І таким чином може видати імена користувачів і паролі з сервера або компютерів відвідувачів.

Як захиститись від Cross Site Scripting

Як і в випадку SQL Injection, захиститись від Cross Site Scripting досить легко. Найкращим способом щоб вирішити дану проблему являється заміна всіх тегів (<>), отриманих по замовчуванню від користувача, на відповідні & – послідовності, (&lt; і &gt;).

Для того щоб справитись з таким завданням необхідно використати функцію php htmlentities_(). Ця функція легко і просто перетворить символи в відповідні HTML.

Наприклад теги HTML починаються з символів “<“. Використовуючи функцію предявлену вище, цей символ перетвориться на &lt;

Якщо наприклад з форумом ми хочимо надати можливість відвідувачам форматувати вміст форума, по замовчуванню використовувати HTML для форматування тексту. Примінити дану процедуру в чистому виді неможливо, тому необхідно знайти альтернативне рішення.

Для того щоб отримати можливість реалізувати дане рішення, нам необхідно познайомитись з bbCode (скорочено англ. Bulletin Board Code — “популярна мова розмітки, яка використовується при форматуванні повідомлень на форумах, блогах, на чатах”). Мова bbCode володіє синтаксисом, дуже похожим на HTML, і враховуючи такий факт якщо ви використовуєте HTML не викличе труднощів

в використанні.

Деякі приклади використання bbCode.


BBCODE:[B]полужирний текст[/B]

HTML<STRONG> полужирний текст</STRONG>

РЕЗУЛЬТАТ полужирний текст


BBCODE:[І] текст курсивом[/і]

HTML<em>текст курсивом </em>

РЕЗУЛЬТАТ текст курсивом


BBCODE:[u] підкреслений текст[/u]

HTML: <span style=”text–decoration: underline”>підкреслений текст</span>

РЕЗУЛЬТАТ підкреслений текст


BBCODE:[s] закреслений текст[/s]

HTML: <span style=”text–decoration: line–throut”>закреслений текст</span>

РЕЗУЛЬТАТ закреслений текст


BBCODE:[quote]цитата [/quote]

HTML<BLOCKQUOTE> ЦИТАТА </BLOCKQUOTE>

РЕЗУЛЬТАТ ЦИТАТА


BBCODE:[URL=http://ruszura.in.ua] Zura-Blog[/url]

HTML: <a href =”http://ruszura.in.ua”>Zura-Blog</a>

РЕЗУЛЬТАТ посилання на сайт Zura-Blog


BBCODE:[img]=http://ruszura.in.ua/img.jpg [/img]

HTML: <img src =”http://ruszura.in.ua/img.jpg”>/>

РЕЗУЛЬТАТ картинка.

Використовуючи BBCODE ми можемо захиститись від XSS

.