1. Курсов проект
по
Безопасност и защита
на тема
Защита при създаване на PHP приложения в
Интернет
Изготвил: Проверил:
Антон Шумански доц.д-р.Стефан Дражев
спец.Информатика, V курс,гр.59, х.ас. Видилина Кръстева
фак.№10782
Икономически Университет – Варна, 2013
2. Защита при създаване на PHP приложения в Интернет 2013
Съдържание
1. Какво представлява PHP. Същност и приложение на езика. ........................................ 3
2. Същност на уеб приложенията ........................................................................................ 4
3. Видове атаки насочени към php приложенията ............................................................. 6
3.1. XSS атаки.................................................................................................................... 6
3.2. Brute-force атаки ............................................................................................................ 6
3.4. Отĸpaдвaнe нa cecия (session hijacking) ................................................................... 7
3.5. SQL инжекция (SQL Injection) ............................................................................... 10
3.6. Атака чрез препълване на буфера (buffer overflow attacks) ................................. 11
3.7. Cross-site request forgery (CSRF) ............................................................................ 12
3.8. Атаки с разпределен отказ от обслужване(DDoS атаки) ..................................... 13
4. Начини за защита от атаки ............................................................................................. 14
4.1. XSS атаки .................................................................................................................. 14
4.2. Brute-force атаки ....................................................................................................... 15
4.3. Отĸpaдвaнe нa cecия ................................................................................................ 16
4.4. MySQL Injection ....................................................................................................... 17
4.5. Атака чрез препълване на буфера .......................................................................... 18
4.6. Cross-site request forgery (CSRF) ............................................................................ 18
4.7. Предпазване от DDoS атаки ................................................................................... 19
4.8. Secure Sockets Layer (SSL) и Transport Layer Security (TLS). .............................. 20
Заключение ............................................................................................................................. 21
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 2
3. Защита при създаване на PHP приложения в Интернет 2013
Източници ............................................................................................................................... 22
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 3
4. Защита при създаване на PHP приложения в Интернет 2013
1. Какво представлява PHP. Същност и приложение на езика.
PHP представлява скриптов език за програмиране. Той е сравнително нов език.
Въпреки това добива голяма популярност сред уеб програмистите поради мощната му
функционалност и лесното му използване. Главно се използва за създаването на
сървърни приложения и динамично уеб съдържание. PHP е изграден на базата на C и
Perl. Едно от главните му предимства е, че е безплатен и се разпространиява под
лиценза на BDS. Друга причина за успеха на този език е, че е сървърен език, тоест той
се изпълнява от yеб сървър, а не от компютъра на потребителя. По този начин не се
изискват големи възможности от компютрите на потребителите, а само от сървърите,
които го изпълняват. Може да работи под различни операционни системи (Unix, Linux,
Windows, BSD, Mac OS X и други). Също така има възможност да осъществява връзка с
няколко вида бази от данни като: MySql, Oracle, PostgreSQL, Sybase и други.
2. Същност на уеб приложенията
Уеб приложение e приложение, до което потребителите имат достъп през мрежа
като Интернет или интранет. Уеб приложение също може да означава софтуерно
приложение, което е написано на поддържан от браузър програмен език (като
JavaScript, HTML(маркиращ език), PHP и т.н.) и което разчита обичайните уеб браузъри
да успеят да рендерират приложението. Като по кратко определение за уеб приложение
може да се разгледа следното: Уеб приложение е софтуер, който работи в браузъра.
Днес уеб технологиите позволяват да се създават не само интерактивни и
функционални сайтове, но и напълно функционални уеб приложения, с интерфейс,
функционалност и бързодействие, които не само не отстъпват на класическите
настолни приложения, но и в много отношения ги надминават.
Традиционните приложения се инсталират или се стартират от диск или друга
медия. Те разчитат на дадена среда, която в общия случай се осигурява от
операционната система, а в други случаи е допълнително инсталирана на съответния
компютър. Стартирайки едно традиционно (настолно) приложение, то зарежда
интерфейс, без необходимостта от посредствени програмни средства.
При уеб приложенията, за да се стартира приложението се използва браузър.
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 4
5. Защита при създаване на PHP приложения в Интернет 2013
Едни от оснивните предимства на уеб приложението са следните:
Ниски разходи за разработка - И като време и като ресурси, разработката на уеб
приложения е значително по-евтина от тази на настолен софтуер. В общия
случай уеб приложенията се пишат на същите програмни езици, които се
използват за изработка на уеб сайтове. От една страна тези програмни езици са
много популярни и има много програмисти, които умеят да пишат на тях, а от
друга - съществуват и много готови ресурси, които могат да намалят времето за
разработка и съответните необходими ресурси;
Независими от операционната система - Понеже работят в браузър, уеб
приложенията са общо взето независими от конкретната операционна система;
Не изискват инсталация - За да използва дадено уеб приложение, потребителят
не се налага да го инсталира, както е с много от настолните приложения.
Приложението се стартира директно без предварителна инсталация;
Достъпни отвсякъде посредством Интернет - В общия случай уеб приложенията
се намират на сървър, свързан с Интернет и са достъпни от всяко устройство,
свързано с Интернет;
Сигурността е важна част при изграждането и функционирането на всички
разпределени компютърни приложения. Това важи с пълна сила за приложенията,
представляващи или предлагащи web услуги, тъй като те се изграждат въз основата на
общи стандарти, осигуряващи междуплатформена съвместимост и прозрачно
местоположение на отделните компоненти. С все по-масовото използване на web
услугите в изграждането на разпределените приложения, нараства и необходимостта от
разработване и реализация на адекватни механизми за защита на такива приложения.
По-долу ще разгледаме някои от основните методи за атака и съответните им
механизми за защита.
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 5
6. Защита при създаване на PHP приложения в Интернет 2013
3. Видове атаки насочени към php приложенията
3.1. XSS атаки
XSS е съкращение от Cross Site Scripting. Обикновено се срещат в уеб
приложения и позволява на атакуващите да инжектират скрипт от страна на
клиента в уеб страници, гледани от други потребители. XSS скриптовете могат да
бъдат използвани от нападателите, за да заобиколят контрола на достъп на даден
сайт. Този тип скриптове представляват около 84% от всички уязвимости в
сигурността. Техният ефект може да варира от дребна неприятност, до значителен риск
за сигурността, в зависимост от чувствителността на данните, обработвани от уязвимия
сайт.
XSS уязвимости са били докладвани и експлоатирани от 1990 г. насам. Видни
обекти, засегнати в миналото са например сайтовете Twitter, Facebook, MySpace,
Orkut и други.
Няма единно прието разделение на различни видове XSS атаки, но неофицялно
те се радзелят на два основни вида: непостоянни (non-persistent) и устойчиви
(persistent).
При устойчивите, неоторизираните тагове се съхраняват постоянно на уеб-
сървъра на жертвата - примерно, използва се SQL инжектиране, за да се заразят
определени полета в базата данни. Оттам нататък всеки, който посещава сайта, може да
е изложен на опасност.
Вторият вид атаки, ( непостоянни ), са трудни за засичане и елиминиране. При
тях неоторизираните скриптови тагове не съществуват на засегнатия уеб-сървър. Не
могат да се търсят в базата данни или файловете. Този тип XSS атаки се възползват от
слаби техники за валидиране на входящото съдържание в сървъра. Те го лъжат така, че
да го накарат да приеме злонамерените редове и после сляпо да ги праща като част от
отговора, който подава към браузъра.
3.2. Brute-force атаки
Методът груба-сила (Brute-force attacks) се състои в това, да се изпробват всички
възможности за ключ. Всъщност, „разбиването” на даден шифър се състои в това, да се
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 6
7. Защита при създаване на PHP приложения в Интернет 2013
намери начин, по-бърз от груба-сила. Например, ако един шифър има ключ, с 250
възможности, brute-force очаква разбиването да стане с 249 проверки. Принципът на
този тип атаки е да обходи всички възножни комбинации, докато не достигне до
използваната. Обикновено се прилага върху сайтове, които изискват потребителко име
и парола. Съществуват най-различни програми, които извършват brute-force атаки. Те
са свободно достъпни в интернет. Пример за такава програма е BrutusA2.
3.3. Изпълнение на злонамерени файлове (malicious file execution)
Тази уязвимост се появява в много уеб приложения. Главно в такива
приложения, в които позволяват URL параметри на имената на файловете , за да се
включат, като URL адреси или препратки към файловата система. В тези слочаи може
да се подадат от „нападателя“ разнични файлове, които да се изпълнят на сървъра и да
удовлетворят целите на „нападателя“ - да му предоставят желаната от него информация
или да повредят информация. Изпълнение на злонамерени файлове може да се
набюдава и когато потребители се опитват да качат файл в даден сайт, чрез форма за
качване на файлове. Потреителите могат да се опитат да качат техен скрипт и по този
начин да осъществят злонамерените си дейстия.
3.4. Отĸpaдвaнe нa cecия (session hijacking)
Почти всички интернет приложения използват потребителски сесии, за да
създават по-персонализирана среда на своя уеб сайт. Сесията на всеки отделен
потребител се съхранява и управлява на сървъра чрез уникален идентификационен
номер (session ID). Точно тези идентификатори са често основна цел на атакуващите,
които чрез тях могат да “откраднат самоличността” на потребител. Повечето сървъри
вече имат изградени защити или поне добри съвети за практики за предпазване на тези
ключове, главно от три класа атаки:
Подслушване – вариант, при който се извършва т.нар. session hijacking от
злонамерен човек подслушващ трафика между клиент и сървър;
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 7
8. Защита при създаване на PHP приложения в Интернет 2013
Предсказване – вече остаряла, но не задължително неработеща, техника за
намиране на session id на друг потребител на базата на статистика. Днешните
сървъри поддържат достатъчно дълги ключове със сравнително надеждни
алгоритми за генериране.
Налучкване - известни още като Brute Force атаки. При защитата
потребителските session id от страна на сървъра може да приемем, че
съвременните уеб сървъри са достатъчно надеждни срещу такъв род атаки.
HTTP е протокол за комуникация, в който не се съхранява текущото състояние
на връзката. За въвеждане на такава функционалност са измислени потребителските
сесии. Базовата идея е сървъра да генерира вече споменатите идентификационни
номера/ключове в някой от ранните моменти на взаимоотношение с потребителя.
Сървърът изпраща към браузъра на потребителя тези ключове и при нова заявка от
потребителя очаква да му бъде “върнат” същия session id. По този начин session id са се
превърнали и в идентификационен признак за потребителите, като приложенията ги
използват, за да запазват допълнителна информация за потребителя (обикновено
променливи) и създават усещане за индивидуалност в потребителите.Поради
относителната сигурност много често session ID се използват като метод за
автентикация. Това позволява гъвкавост на приложенията, така че да не питаме
потребителя непрекъснато за име и парола, дигитален сертификат или друг тип
проверка на самоличност, а вместо това да стартираме уникална потребителска сесия и
да я използваме като автентикатция след първото му успешно влизане в системата.
Така session IDs се превръщат в нещо като временни пароли за достъп до системата.
Поради тази причина те са много апетитна информация за хакерите - на практика
позволяват директен достъп до системата чрез чужд профил. На схемата по-долу е
покан един пример за използване на чужда сесия.
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 8
9. Защита при създаване на PHP приложения в Интернет 2013
Фиг. 1, Използване на чужда сесия
Първо атакуващият (в случая също легитимен потребител на системата) се
автентикира на сървъра (1) и получава дадено session ID (2). След това атакуващия
изпраща връзката http://online.worldbank.dom/login.jsp?sessionid=1234 към потребителя,
опитвайки се да го накара да я последва (3). Потребителя последва връзката и отива на
страницата за въвеждане на име и парола на сървъра (4). В този момент сървъра вижда,
че потребителя вече е стартирал потребителска сесия и няма нужда от създаване на
нова. Накрая потребителят предава името и паролата си към скрипта за автентикация и
сървърът му дава права за достъп до личния му банков акаунт. В този момент
атакуващия, знаейки неговото session ID, има достъп до личните данни на клиента. В
този момент се казва, че потребителят е “проникнал в сесията на атакуващия”.
Друг вариант за атака е кражбата на бисквитките, в които се съхранява session id-то.
На схемата по-долу е показан принципа на кражба на бисквитки.
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 9
10. Защита при създаване на PHP приложения в Интернет 2013
Фиг. 2 Кражба на бисквитки
Атакуващият намира XSS пробив в услуга на сървъра www.worldbank.dom,
която е от същият домейн както online.worldbank.dom. Изпраща се адреса към
потребителя (1), потребителя отива на дадения адрес (2) и приема cookie от
www.worldbank.dom (3). Така cookie е валидно и за другият сървър
online.worldbank.dom. Когато потребителят влезе в банковия си акаунт (4), атакуващият
може да направи пробив (5).
Друга “неприятна” възможност на браузърите е да могат да създават cookie чрез
meta таг:
<meta http-equiv=Set-Cookie content=”sessionid=1234″>,
при което се постига същия ефект както с javascript-a.
3.5. SQL инжекция (SQL Injection)
SQL инжекциите са начин за променяне на заявката към дадена база данни -
MySQL, MSSQL или друга. Основната цел е да се открадне информация от базата
данни или в по-редки случаи да се увреди информацията. Базада данни е основното
хранилище на информация за всяка една система. В уеб системите в нея обикновено се
съхранява поверителна информация, като потребителски имена, пароли и други лични
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 10
11. Защита при създаване на PHP приложения в Интернет 2013
данни за всеки един потребител на системата. Именно тези данни са главната цел на
недобронамерените потребители. Например ако в дадено приложение съществува
следната заявка:
SELECT * FROM tablica WHERE id = '$id'
При нормално изпълнение на скрипта променливата $id ще съдържа номер,
но ако някой напише на мястото на цифрата това: 5'; DROP TABLE име на таблица; --
ще може да съсипе цялата база данни. Тази инжекция използва GET (променливи
подадени чрез http адреса). Може да се направи чрез POST, SESSION, COOKIE и дори
SERVER ако се използват от системата.
3.6. Атака чрез препълване на буфера (buffer overflow attacks)
Буферът е временна област за съхранение на данни. Когато там се поставят
повече данни, отколкото е предвидено първоначално от даден програмен и системен
процес, допълнителните данни ще го препълнят, откъдето произлиза и името,
причинявайки част от данните да изтекат към други буфери, което може да разруши
данните, които те съдържат или да запише върху тях.
При атака за препълване на буферите препълващите данни понякога съдържат
специфични инструкции за дейности, проектирани от хакери или злонамерени
потребители. Например данните могат да превключат отговор, който уврежда
файловете, променя данните или разкрива частна информация.
Хакерите биха използвали буферното препълване, за да се възползват от
програма, която очаква въвеждане от потребителя. Има два типа буферно препълване -
стек базирани и хип базирани.
Хип (от heap – купчина) базираните са по-трудни за изпълнение и затова се
срещат по-рядко. Те атакуват приложението чрез „наводняване“ на пространството
памет, запазено за програмата. Стек (от stack - купчина) базираното препълване на
буфера, което се среща по-често сред хакерите, експлоатира приложения или програми,
като използва това, което е известно като стек - пространство от паметта, използвано за
съхранение на потребителски въвеждания.
Един стек може да поддържа само определено количество данни и ако входният
низ е по-дълъг от резервираното пространство, резултатът е препълване, създаващо
дупка в сигурността. Злонанерени хакери търсят такива пробойни със специално
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 11
12. Защита при създаване на PHP приложения в Интернет 2013
написани команди, които причиняват препълване и задействат атаката. След като
злонамерената команда е причинила препълване, хакерът все още трябва да изпълни
командата, като посочи адрес за връщане, който сочи към командата. Препълването на
буфера „счупва“ частично приложението, но то се опитва да се възстанови, като отива
към адреса за връщане, който е бил пренасочен към злонамерената команда от хакера.
Когато атаката с препълване на буфера задейства командата, намерена в новия адрес за
връщане, програмата смята, че все още работи. Това означава, че командният
прозорец, който е бил отворен, работи със същия набор изпълними разрешения, както
приложението, което е било компрометирано, позволявайки на хакера да получи пълен
контрол над операционната система.
3.7. Cross-site request forgery (CSRF)
Cross-site request forgery (CSRF) е широко използвана уязвимост в уеб
приложенията. Това е атака, чиито трик е да накара жертвата да зареди страница, която
съдържа зловреден код. Този зловреден код наследява идентичност и привилегиите на
жертвата за извършване на нежелани действия от името на жертвата, като променяне на
е-мейл адрес на жертвата, домашен адрес или парола, или извършването на покупка,
превод на пари и други.
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 12
13. Защита при създаване на PHP приложения в Интернет 2013
Фиг. 3 Принцип на работа на CSRF
CSRF атакува целеви функции, които водят до промяна в състоянието на
сървъра, но може да се използват за достъп до чувствителни данни. Най-често
зловредният код представлята IMG или IFRAME и трудно може да се идентифицира.
Реално CSRF представлява инжектиране на заяква в мрежата посредством уеб браузър.
Това води до заразяване на отворените от браузъра сайтове. Този вид атаки са доста
популярни, но и предпазването от тях се реализира сравнително лесно.
CSRF атаки са известни също и с редица други имена, включително XSRF "Sea
Surf", Session Riding и Cross-Site Reference Forgery.
3.8. Атаки с разпределен отказ от обслужване(DDoS атаки)
Атаката с рапределен отказ от обслужване (DDoS) може да бъде пагубна за една
организация, струвайки й време и пари, като по същество изключи корпоративните
системи.
Хакерите извършват DDoS атака, като експлоатират пролуки и уязвимости в
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 13
14. Защита при създаване на PHP приложения в Интернет 2013
компютърната система (често уеб сайт или уеб сървър), за да се позиционират като
главна система. След като веднъж са се поставили в положение на главна система,
хакерите могат да идентифицират и комуникират с другите системи за по - нататъшно
компрометиране.
След като нарушителят е поел контрол над множество компрометирани системи,
той може да възложи на машините да започнат някоя от многото атаки за препълване,
докато целевата система се препълни с фалшиви искания за трафик, което ще доведе до
отказ на услуга за ползвателите на тази система. Потокът от входящите съобщения от
компрометираните системи, ще причини спиране на системната цел и отказ от услуги
към нея, което води до невъзможност за достъп на потребителите до каквото и да било,
и следователно ще струва на организацият време и пари.
4. Начини за защита от атаки
4.1. XSS атаки
За да се защити php приложение от xss атаки трябва много добре да се
филтрират полетата в прилежението, където се въвежда информация и съответно тази
информация после се показва на екрана. Пример за такова поле е поле за коментари в
блог. Символи, които не трябва да бъдат разрешавани за въвеждане в полето са: < > ( )
{ } + ! @ $ % &* и други.
Основни правила, които се спазват при наличието на форми в php приложение са:
Всичко трябва да бъде конвертирано в UTF-8;
Проверка дали дадена стойност съществува;
Премахване интервалите в началото и края (trim);
Премахване, ако има, повече от 1 интервал между думите
( $d = preg_replace('/ss+/', ' ', $_POST['comment']););
В такива случаи много подходящо е да се използва и вградена функция в php:
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
Други два подхода, които могат да се съчетаят с филтрирането на входящите
данни е „алгоритъм за разстояние“ и „отпечатък на браузъра“.
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 14
15. Защита при създаване на PHP приложения в Интернет 2013
Php разполага с библиотеки за определяне на местонахождението на
потребителя. Алгоритъмът за разстояние представлява скрипт, който следи
потребителя в кой град се намира и ако се установи различно междунахождение на
един и същи потребите в рамките на определено време, да се предприемат съответните
мерки.
Подходът „Отпечатък на браузъра“ представлява запазване в сесия на типа и
версията на браузъра на потребителя. Тази информация може да се криптира и да се
проверява. По този начин ако сесията бъде открадната от друг човек, няма да може да
бъде използвана.
4.2. Brute-force атаки
Защита от brute-force атаки от потребителска страна:
Като превенция от brute-force атаки се препоръчва използването на дълги пароли
съчетани от думи и цифри. Думите, които ще бъдат използвани не е
препоръчително да са стандартни (admin, root, code, pass и т.н.), поради факта че
brute force използва комбинацията от най-често използваните думи и речникови
думи;
Друго задължително условие е да се използват различни пароли за различни
сайтове. Това се налага заради фишинг сайтовете, които са направени само да
събират информация от потребителите;
Също така се препоръчва честа смяна на паролите. По този начин ако някои
злонамерен потребител е разбрал дадена парола, достъпът до данните може да
бъде отново ограничен.
Защита от brute-force атаки от програмна страна:
Използване на Captcha (Completely Automated Public Turing test to tell Computers
and Humans Apart) в превод – Напълно автоматизирана проверка за
разграничаване на човек от компютър. Идея на метода:
1. Генериране на произволен код (цифри и букви);
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 15
16. Защита при създаване на PHP приложения в Интернет 2013
2. Записване на този код в потребителската сесия;
3. Изобразяване на този код посредством PHP (като картинка). Кода се
изобразява на картинката като всяка буква е в различен шрифт, големина,
цвят. Допълнително се добавя шум в картинката и понякога блър
(замъгляне) Това се прави с цел затрудняване на ботовете да прочетат
кода;
4. Дадената картинка се показва на потребителя и той въвежда кода от
картинката в текстово поле. След попълването на полето, стойността му
се взима и се сравнява с тази записана в сесията. Ако кода съвпада то е
попълнена от потребител, ако не съвпада тогава се счита, че това е бот;
Втори най-използван метод е блокиране на ИП при неколкократни неуспешни
опити.(Пример: Ако потребител въведе повече от трипъти грешна парола
автоматично се блокира неговото ИП, за определен период от време.)
4.3. Отĸpaдвaнe нa cecия
Справянето с проблема “фиксирана сесия” е в самото приложение. Именно
то трябва да добавя функционалност за справяне с проблема. Задължението на сървъра,
където се изпълнява уеб-приложението, е да защитава session id от “открадване”
(session hijacking), но не и от фиксиране. Приложението трябва да се грижи за:
Игнориране на каквото и да session id подадено от потребителя, независимо дали
сървъра на който се изпълнява е с разрешителен или стриктен режим. По този
начин категорично се задава стриктен режим на достъп до сесиите;
Да не се създават сесии преди потребителя да е влязъл в системата. По този
начин е сигурно, че атакуващият е активен потребител и може да бъде по-лесно
проследен;
Използването на таймер за валидност на сесиите;
Да не разрешава едновременно влизане в системата на един потребител от две
различни места;
Унищожаването на сесия трябва да става на сървъра. Не трябва да се разчита
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 16
17. Защита при създаване на PHP приложения в Интернет 2013
единствено на изтриване на дадено cookie от браузъра на клиента;
Винаги трябва да се предоставя възможност на потребителя за “изход” от
системата. Така ще се унищожи както текущата сесия, така и евентуални
предишни, когато потребителя е забравил да излезе стандартно от системата;
4.4. MySQL Injection
Съществуват различни функции, които по един или друг начин модифицират
входният текст, за да го направят безвреден. Някои от тези функции са:
htmlspecialchars($tekst);
Променя текста, като замeства всички специални символи за HTML като < > %
& " и други с техните аналози в HTML. Това ги променя така, че те могат да се
виждат в браузера, но той няма да ги счита за HTML и те няма да се изпълнят.
Това предпазва от този тип "атаки", които прехвърлят потребителя към други
страници. Те подават HTML, а тази функция го неутрализира.
strip_tags($tekst);
Променя текста, като изтрива всякакви HTML тагове, но информацията която се
подава бива променена и неформатирана.
trim($tekst);
Премахва всички празни места, таблуации, нови редове и други подобни.
addslashes($tekst);
Основната защита срещу SQL инжекции. Слага „“ пред всички кавички, така че
SQL да ги игнорира.
Основната цел е филтриране на данните, които се подават към заявката. Не
трябва да се има доверие на потребителя, а трябва всички данни да бъдат филтрирани.
След като е сигурно,че са филтрирани могат да бъдат подадени към заявката.
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 17
18. Защита при създаване на PHP приложения в Интернет 2013
4.5. Атака чрез препълване на буфера
Една от основните препоръки е дa се избягва използването на библиотечни
файлове. Библиотечните файлове, които се използват в езиците за програмиране и по
природа са несигурни, са цел за хакерите по време на атаките срещу приложенията.
Всяка слабост, намерена от хакера в библиотечния файл, ще съществува също във
всички приложения, които използват библиотечни файлове, давайки на хакерите
блестяща цел за потенциална атака.
Важно е също да се филтрират вероятни опасни HTML кодове и знаци, които
могат да причинят проблеми с базата данни. Например в ASP кода апострофът,
кавичките, амперсантът са запазени символи. Тези запазени символи не могат да се
включват в данните, въвеждани от потребителите или те ще причинят счупване на
приложението. Важно е да се филтрират и да се заменят с други, за да се избегнат
усложнения и проблеми.
Тестването на приложенията е задължителен етап преди внедряването им.
Тестването трябва да включва както и въвеждане на некоректрни данни, така и опит за
разпробиване и хакване преди да бъде пуснато онлайн в Интернет.
4.6. Cross-site request forgery (CSRF)
Защитата от този вид атаки е сравнително проста, но препоръчителна. Идеята е
да се създаде сесия с уникален ключ. Същият ключ да се генерира в скрито поле в
дадената форма, която ще се проверява за CSRF. При изпращането на формата двата
ключа се сравняват. Ако са еднакви означава, че всичко е наред и изпращането на
формата може да продължи. Чрез php код ситуацията може да бъде представена по
следния начин:
<?php
session_start();
if(isSet($_POST['submit'])) {
if(isSet($_SESSION['token'] == $_POST['token'])) {
echo 'ОК';
} else
header("Location: ./index.php");
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 18
19. Защита при създаване на PHP приложения в Интернет 2013
}
} else {
$token = md5(uniqid(rand(), true));
$_SESSION['token'] = $token;
$form = '
<form method="POST" action="">
Текст: <input type="text" name="message" /><br />
<input type="hidden" name="token" value="' . $token . '" />
<input type="submit" name="submit" />
</form>';
echo $form;
}
?>
4.7. Предпазване от DDoS атаки
Предотвратяването на DDoS атака може да бъде трудно, тъй като тя е
предизвикателство за това как да се направи разграничение между зловредна заявка за
трафик и легитимна такава, тъй като те използват еднакви протоколи и портове.
Въпреки това съществуват няколко стъпки, които могат да се предприемат за защита на
системите от разпределени атаки, предизвикващи отказ от услуги:
Необходимо е да има наличен излишък от честотна лента във връзката на
организацията с интернет: Това е една от най-лесните защити срещу DDoS, но може да
се окаже доста скъпа. Когато се използва много честотна лента за обслужване на
заявките за трафик, това може да помогне за предпазване от ниско ниво DDoS атаки.
Освен това, колкото по-широка честотна лента има дадена организация, толкова повече
трябва да направи нападателят, за да запуши връзката й.
Препоръчително е да се използва система за откриване на прониквания (Intrusion
Detection System, IDS). Няколко от съвременните системи за откриване на прониквания
са снабдени с технологии за защита на системите от DDoS атаки, като използват методи
за проверка и потвърждаване на връзката и за предотвратяване достигането до
корпоративните сървъри на определени заявки.
Съществуват устройства за DDoS защита и предотвратяване, които са
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 19
20. Защита при създаване на PHP приложения в Интернет 2013
конструирани специално за откриване и осуетяване на DDoS атаки.
Препоръчително е и да се поддържа резервна интернет връзка с отделна база с
интернет адреси за критични потребители. Това представлява алтернативен път, ако
първичната верига е претоварена със злонамерени заявки.
4.8. Secure Sockets Layer (SSL) и Transport Layer Security (TLS).
SSL е създаден от Netscape и се използва широко за защита на web приложения
на транспортно ниво. SSL работи като използва криптиране с частен ключ. Ключът се
предава по SSL връзка. SSL осигурява функционалност за защита на данните,
включващи автентикация, цялостност и конфиденциалност на предаваната
информация. TLS е стандарт предложен от IETF и базиращ се на SSL 3.0. Двата
протокола не са взаимно съвместими, но TLS има възможност да работи като SSL 3.0
обратна съвместимост. За сигурната работа на web услугите не е уместно да се
използват основните механизми на защита на транспортно ниво (SSL/TLS) и / или на
мрежово ниво (IPsec), поради следните причини: осигуряват защита на междинно ниво,
а не защита на приложенията от точка до точка; предлага сигурност на канала, а не на
съобщенията ( а web услугите си комуникират предимно със SOAP съобщения ); не
предлагат цифрови подписи и др.
Защитата на ниво съобщения е защита на ниво приложен слой и представлява
сигурност на приложение работещо на даден хост през мрежата до приложението на
другия хост (от точка до точка). То не се интересува от намиращия се под него
транспортен механизъм. Всичките изисквания за сигурност като цялост,
конфиденциалност и потвърждения могат да бъдат осигурени от този слой.
Приложението само по себе си контролира същността на предаването на данни . За web
услугите има няколко стандарта, отнасящи се до защитата на приложенията на ниво
съобщения. Те са следните:
XML Encryption - Тази спецификация е дефинирана от W3C и адресира
изискването за конфоденциалност на данните чрез използване на техники за
криптиране . Криптираните данни са обвити в определените от спецификацията
XML тагове . XML Signature - Тази технология , дефинирана от W3C и IETF
(The Internet Engineering Ta sk Force ) осигурява автентикация и цялостност на
данните на ниво съобщения;
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 20
21. Защита при създаване на PHP приложения в Интернет 2013
WS-Security - WS-Security е стандарт, дефиниран от OASIS ( Организация за
развитие на стандартите за структурирана информация ), и осигурява механизъм
за автентикация, цялост и конфиденциалност на данните в рамките на едно
SOAP съобщение. WS-Security се използва като XML Signature и XML
Encryption спецификациите и определя как да се включат цифрови подписи и
криптирани данни в едно SOAP съобщение;
SAML (Security Assertion Markup Language) - Това е стандарт, дефиниран от
OASIS, осигуряващ механизми за споделяне на информация, свързана с
автентикация и оторизация, от партниращи си приложения;
Заключение
Все повече организации разработват и внедряват web услуги за реализиране на
техните бизнес–модели. С увеличаване използването на web услугите нараства и
необходимостта от защита на тези приложения. Сигурността е нещо относително.
Никога едно приложение не може да бъде сто процента сигурно, но използването на
определени методи за защита в дадени ключови моменти във всяко едно приложение
значително намалява риска от злонамерени потребители. В темата са разгледани едни
от най - важните методи за защита на php приложения, които е препоръчително да
бъдат използвани във всяко едно уеб приложение.
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 21
22. Защита при създаване на PHP приложения в Интернет 2013
Източници
1. http://www.w3.org/Encryption/
2. http://www.w3.org/Signature/
3. http://review.sagabg.net/kak-da-zashitim-ueb-prilozheniyata-predotvratyavan.html
4. http://web-tourist.net/login/login/view.php?st=2418
5. http://www.cphpvb.net/
6. https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29
7. http://hsi.iccs.bas.bg/staff/T.Stoilov/papers/Stoilov_EIvanovaCINSO.pdf
8. Шефлет, Крис. Основи на PHP сигурността. O`Reilly, 2005
Антон Шумански, спец.Информатика, V курс, гр.59, фак. №10782 22