SlideShare a Scribd company logo
1 of 10
Download to read offline
ИКОНОМИЧЕСКИ УНИВЕРСИТЕТ – ВАРНА
             ЦЕНТЪР ЗА МАГИСТЪРСКО ОБУЧЕНИЕ
                   КАТЕДРА “ИНФОРМАТИКА”




                    по
  БЕЗОПАСНОСТ И ЗАЩИТА НА Мicrosoft МРЕЖИ И
               ПРИЛОЖЕНИЯ
                              на тема
  “Защита на Web приложения – Cross Site Scripting, SQL Injection”




Изготвил:                                  Проверил:
Николай Николов                            доц. д-р Стефан Дражев
специалност:
Приложна информатика – ДОВО
VII курс, I гр., Ф № 5494



                              Варна 2013
Web приложения
     Традиционните приложения се инсталират или се стартират от диск или
друга медиа. Те разчитат на дадена среда, която в общия случай се осигурява от
операционната система.
     При уеб приложенията, за да стартирате приложение използвате браузър.
В общия случай приложението се отваря след написване на неговия уеб адрес в
браузъра.
     Днес уеб технологиите позволяват да се създават не само интерактивни и
функционални сайтове, но и напълно функционални уеб приложения, с
интерфейс, функционалност и бързодействие. Термина уеб приложение може да
се дефинира по следния начин: Софтуер, който работи в браузъра.
      Web-базираните приложения са тясно свързани с Интернет. При тях
целият процес на въвеждане, обработване и запазване на информацията се
извършва в Глобалната мрежа. Основно предимство на този тип приложения е
лесният достъп до тях от която и да е точка на света. Информацията, която се
въвежда и променя, обикновено се запазва на отдалечен компютър-сървър, до
който трябва да имаме достъп всеки път, когато е необходимо да я
актуализираме. Самите уеб сайтове могат до известна степен да се смятат за
Web-базирани приложения особено когато става въпрос за динамични сайтове
със сложна структура и разширена функционалност. Постоянната активност на
такъв тип приложения е друго основно предимство, тъй като услугите, които се
предлагат, ще бъдат достъпни 24 часа в денонощието, 7 дни в седмицата (това е
идеалният случай). Високото ниво на сигурност на сървърите, разнообразието
от модули за управление на данните, както и достъпните цени правят Web-
базираните приложения желано средство за работа както за малкия и среден
бизнес, така и за големите корпорации.
      Основен недостатък на този тип приложения е пряката зависимост на
системата за управление от редица фактори. Такива са например Интернет-
връзката, натоварването на сървъра, където се намира приложението или където
се записва информацията, възможността за поява на непозволени действия от
страна на някои потребители спрямо системата. Разбира се всички тези
потенциални проблеми са разрешими по един или друг начин, но е факт, че те
биха могли да доведат до нарушаване безпроблемната работа на Web-
приложението и евентуално до загуба на информация.
      Зaщитaтa нa eднo yeб пpилoжeниe e eдин oт нaй-вaжнитe eтaпи, зaeднo c
пpoeктиpaнeтo и oптимизaциятa мy. Aтaкитe дaлeч нe ce cвeждaт caмo дo
MySQL Injection и XSS. Имa и oщe мнoгo дpyги, кaтo фaлшиви HTTP зaявки,
brute-force aтaки, пyбличнo излaгaнe нa кoд, oткpaдвaнe (фикcиpaнe) нa cecия и
дpyги.
     MySQL Injection и XSS, oбaчe, ca нaй-чecтo cpeщaнитe aтaки, пopaди
мнoгoтo caйтoвe yязвими към тяx. Toвa ca aтaки, кoитo ce ocнoвaвaт нa
yязвимocти пpи изпpaщaнeтo и пoлyчaвaнeтo нa инфopмaция мeждy
пoтpeбитeля и cъpвъpa. Пpaвилoтo, кoeтo тpябвa дa ce cпaзвa, e чe вcичкo, кoeтo
влизa и излизa oт бaзaтa дaнни, тpябвa дa ce филтpиpa! He тpябвa дa ce имa
дoвepиe и нa никакви дaнни, пpeдcтaвeни oт пoтpeбитeля!

                     Cross Site Script (XSS) атаки
      Cross Site Scripting (XSS) е атака, която използва уязвимост на
приложението и ”вмъква” нежелан код, който се изпълнява в браузъра на
крайния потребител. Най-общо казано атаката цели да намери място в
програмата, в което се отпечатва стойността на дадена променлива и не се
проверява коректно нейното съдържание. Обикновено в съдържанието на
променливата се записва HTML, XHTML, JavaScript, ActiveX, VBScript, Flash, и
др видове изпълним код. Възможностите за цел на атаката може да са много –
придобиване на достъп до защитена зона на сайта (чрез постигане на session
hijacking), подвеждане на потребителя да въведе информация към трети
източник (physhing), инсталиране на нежелани програми на компютъра на
потребителя (virus, worm, trojan, …), и др.
     Видове XSS атаки:
     1. Директни: Атакуващият предоставя връзка или друг вид “маскиран” код
към клиента. Когато клиента последва такава връзка той попада на
оригиналният уебсайт на дадената услуга, но вече с модифициран код. Тези
атаки са възможни най-вече чрез изпратени писма по e-mail.
      2. Статични: Нежелания код се вмъква в базата данни след което се
изчавка уязвимата страница да бъде отворена. Това са най-честите атаки при
т.нар. социални мрежи – форуми, блогове, дискусионни групи, и т.н.
     3. DOM: Това са XSS атаки от т.нар. локално ниво. Обикновено се
използва уязвимост в скрипт на продукта, чрез който самият софтуер да
предизвика директна XSS атака към жертвата.
     Как да бъде избегнат XSS.
     Трябва да бъдат спазвани някой правила за да се постигне по-добра
защита от XSS атаки.
     Никога не трябва да се вярваме на потребителите на даден сайт.
     Всички входящи данни трябва да бъдат валидирани, нормализирани и
филтрирани.
      Задължително трябва да бъдат прехвърлени определени знаци, в
съответните им HTML entry и да бъдат изпращани към браузъра само в този
вид. Задължително трябва да се конвертират:
     & -> &
     < -> &lt;
     > -> &gt;
” -> &quot;
      ‘ -> &#x27;
      / -> &#x2F;
      Когато към браузъра бъде изпратен &lt; ще го визуализира като < тоест
<script ще бъде изпратено като &lt;script , и бразузъра няма да го изпълни като
javascript.
      Не слагайте лични данни и “коментари” на една страница
     XSS не е само за крадене на сесия, XSS може да вземе цялата HTML
страница, или част от нея, и да я изпрати на някой сървър. Тоест ако на
страницата за “профил” на потребителя имате някакво поле, чийто данни идват
от външни потребители, то ако мине XSS атака, този код, ще може да вземе
цялата страница с всички данни на потребителя.
      HTTPOnly флаг на бисквитките
     Всеки език позволява този флаг да бъде вдигнат, и повечето браузъри го
спазват. Това което прави е, че не позволява на JS да чете тези бисквитки. Тоест
ако мине XSS, то кода не може да види бисквитките с този флаг, тоест няма
кражба на сесия.
      На IP не може да се разчита
      Голяма част от хората са с динамични IP адреси, други минават
(доброволно или не) през прокси сървъри, и е възможно 2 заявки от един и
същи потребител, да дойдат от 2 различни адреса, дори и заявките да са в
рамките на секунда. Някой доставчици правят нещата още по-зле, като AOL ,
понеже при тях всяка заявка е с различно IP, и на всичко отгоре е и от различен
град.
    Примерна XSS атака към форма, която не е защитена по никакъв начин.
Формата е примерна и представлява част от „форма за регистрация“.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Контактна форма</title>
</head>
<body>


<form action="contact_insert12.php" method="post" name="forma12">
      <table width=400 border=1>
<tr>
                       <td align="left">
                       <p>Име:<br/>
                               <input type="text" size="20" name="fname" /></p>
                       <p>Фамилия:<br/>
                               <input type="text" size="20" name="lname"/></p>
                       <p>Населено място:<br/>
                               <input type="text" size="20" name="place1"/></p>
                       <input type="submit" name="submit" value="Изпрати"/>
                       </td>
               </tr>
        </table>
</form>
</body>
</html>
Скрипт към формата, който ще извежда въведените данни
<?php
if(isset ($_POST['submit'])) {
        $fname = $_POST['fname'];
        $lname = $_POST['lname'];
        $place1 = $_POST['place1'];
    print 'Име: ' . $fname . '<br /> Фамилия: ' . $lname . '<br /> Град: ' . $place1;
}
?>


     Кодът на нашата атака, който може да се постави в което и да е от
текстовите полета:


        <div style="text-align: center;"><p style="font-family: Verdana; font-style:
        normal; font-variant: normal; font-weight: bold; font-size: 36px; line-height:
      normal; font-size-adjust: none; font-stretch: normal; color: rgb(255, 0,
0);">This
      page has been Hacked!</p><img
src="http://ha.ckers.org/images/stallowned.jpg"
     border="0"><p style="font-family: Arial; font-style: italic; font-variant:
normal;
font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust:
none;
          font-stretch: normal; color: rgb(221, 221, 221);">XSS Defacement</p></div>




          Резултатът, който ще получим е следния:


      Ако направим една функция с име security, която ще има два параметъра.
Първият ще бъде стринга с данните, който искаме да проверим, а вторият няма
да е задължителен и ще бъде за максимална стойност на параметъра.
<?php
function security($data, $max = null)
{
    if(is_numeric($data)) {
      if($max == null) {
           return (int)$data;
      } else {
           if($data <= $max) {
               return (int)$data;
           } else {
               return "Въведената стойност е прекалено голяма!";
           }
      }
    } else {
if($max == null) {
            $data = htmlspecialchars(addslashes($data));
            return $data;
        } else {
            if(strlen($data) <= $max) {
                $data = htmlspecialchars(addslashes($data));
                return $data;
            } else {
                return "Това поле не може да съдържа повече от $max символа";
            }
        }
    }
}
if(isset ($_POST['submit'])) {
            $fname = security ($_POST['fname'], 10);
            $lname = security ($_POST['lname'], 15);
            $place1 = security ($_POST['place1'], 15);
    print 'Име: ' . $fname . '<br /> Фамилия: ' . $lname . '<br /> Град: ' . $place1;
}
?>




            Резултатът, който ще получим е следния
Защита от SQL Injection
     SQLi се използва за злонамерено изпълнение на SQL заявка към базата
данни.
     Чрез тази техника може да бъдат експлоатирани уязвими кодове.
     SQL инжeктиpaнeтo e нaй-чecтo cpeщaнaтa yязвимocт в PHP
пpилoжeниятa. To ce ocнoвaвa нa гpeшкa нa PHP пpoгpaмиcтa, пpи кoятo нe ce
филтpиpa инфopмaциятa, пoдaдeнa към бaзaтa дaнни. Чecтo нe ce филтpиpa и
въpнaтия peзyлтaт, пpи кoeтo ce paзкpивaт цeнни дaнни и пътищa.
     Пример за oпacнocт oт MySQL Injection.
     Aкo cкpипт зa вxoд в cиcтeмaтa имa cинтaкcиc oт poдa:
      $sql = "SELECT * FROM users WHERE username = '$user' AND password =
'$pass'". Aкo към тaзи зaявкa, нapyшитeлят пoдaдe eдиничнa кавичка зa
пoтpeбитeлcкo имe и пpoизвoлнa пapoлa, зaявкaтa щe въpнe cлeднaтa гpeшкa:
     You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near 'WHERE username = ' ' '
AND password = 'sometext
     C мнoгo мaлкo paбoтa (пoдaвaнe нa кaвичкa), нapyшитeлят вeчe знae
имeнaтa нa двe кoлoни oт тaблицaтa и тoвa, чe дaннитe и в двeтe пocoки нe ca
филтpиpaни пpaвилнo. Hapyшитeлят знae и cинтaкcиca нa клayзaтa WHERE, oт
къдeтo мoжe дa cи cглoби зaявки зa вcичкo, кoeтo мy тpябвa, например:
     myuser ' or 'foo' = 'foo' --
      Aкo тoвa ce въвeдe кaтo пoтpeбитeлcкo имe, нapyшитeлят щe влeзe
ycпeшнo в cиcтeмaтa, бeз дa имa нитo пoтpeбитeлcкo имe, нитo пapoлa. A aкo
нapyшитeлят знae пoтpeбитeлcкo имe c нyжнитe мy пpaвa, тoй мoжe дa влeзe и c
нeгo, бeз дa мy ce нaлaгa дa знae пapoлaтa, пpocтo въвeждa зa пoтpeбитeл:
     cloxy' --
      SQL инжeктиpaнeтo може да бъде избегнато. Вcички пpoмeнливи, кoитo
ce вкapвaт в eднa MySQL зaявкa, тpябвa дa бъдaт филтpиpaни c фyнкциятa
mysql_real_escape_string(). B гopния пpимep, тoвa ca пpoмeнливитe $user и
$pass. Cинтaкcиcът e както cлeдвa: $user = mysql_real_escape_string($user) и тaкa
зa $pass.
     Най-лесния начин да се предпазите от SQL инжекции е да филтрирате
всички входящи данни. Например , чрез функциите:
     htmlspecialchars(); addslashes(); и trim();
Функции
     htmlspecialchars() - преобразува специални знаци в html единици
     addslashes() - екранира специалните знаци на даден стринг
     trim() - премахва знаци в началото и края на даден стринг
       htmlentities() - преобразува всички подходящи знаци в HTML единици и е
.. сходна с htmlspecialchars();
     Допълнителна защита може да бъде написването на скрипт, който
проверява за грешни пароли - при 3 грешни опита за вход с грешна парола в
базата данни, акаунта се заключва за 15 минути.


     Причини за уязвимости към SQLi в системата могат да възникнат в тези
случай:
     - Без филтриране на входящите данни
     - Уязвимост в сървъра на базата данни


     Методи за защита от SQL инжекция:
     - Филтриране на данните
     - Изключване на докладите за грешки.
     - Създаване на потребител, с по-малко привилегии.
     - Максимална стойност
Използвана литература


C. Snider, T. Mayer, M. Southwell, “Pro PHP Security” - Second edition
J. Grossman, R. Hansen, P. Petkov, A. Rager, “XSS Attacks”
R. Alvarez, D. Hartley, J. Hamler, H. Meer, “SQL Injection”

http://web-tourist.net
https://www.owasp.org
http://gatakka.eu
http://www.cphpvb.net

More Related Content

Similar to 5494 n nikolov_zashtita

Php sec referat
Php sec referatPhp sec referat
Php sec referat
Dido_mn
 
Защита при създаване на Dot net приложения в интернет
Защита при създаване на Dot net приложения в интернетЗащита при създаване на Dot net приложения в интернет
Защита при създаване на Dot net приложения в интернет
Monika Petrova
 
Защита при създаване на PHP-приложения в Интернет
Защита при създаване на PHP-приложения в ИнтернетЗащита при създаване на PHP-приложения в Интернет
Защита при създаване на PHP-приложения в Интернет
Валентин Атанасов
 
Защита при създаване на PHP-приложения в Интернет
Защита при създаване на PHP-приложения в ИнтернетЗащита при създаване на PHP-приложения в Интернет
Защита при създаване на PHP-приложения в Интернет
eismail
 
FABRIQ - Presentation Nakov 0.8
FABRIQ - Presentation Nakov 0.8FABRIQ - Presentation Nakov 0.8
FABRIQ - Presentation Nakov 0.8
Svetlin Nakov
 
Сигурност при разработката на WordPress разширения
Сигурност при разработката на WordPress разширенияСигурност при разработката на WordPress разширения
Сигурност при разработката на WordPress разширения
Veselin Nikolov
 
Защита при създаване на PHP приложения в Интернет
Защита при създаване на PHP приложения в ИнтернетЗащита при създаване на PHP приложения в Интернет
Защита при създаване на PHP приложения в Интернет
Anton Shumanski
 
ИнтеRESTни уеб услуги
ИнтеRESTни уеб услугиИнтеRESTни уеб услуги
ИнтеRESTни уеб услуги
svilen.ivanov
 
Php security
Php securityPhp security
Php security
phristov
 

Similar to 5494 n nikolov_zashtita (20)

PHP Security
PHP SecurityPHP Security
PHP Security
 
Защита при създаване на Java приложения в интернет
Защита при създаване на  Java приложения в интернетЗащита при създаване на  Java приложения в интернет
Защита при създаване на Java приложения в интернет
 
Php sec referat
Php sec referatPhp sec referat
Php sec referat
 
Защита при създаване на Dot net приложения в интернет
Защита при създаване на Dot net приложения в интернетЗащита при създаване на Dot net приложения в интернет
Защита при създаване на Dot net приложения в интернет
 
Защита при създаване на PHP-приложения в Интернет
Защита при създаване на PHP-приложения в ИнтернетЗащита при създаване на PHP-приложения в Интернет
Защита при създаване на PHP-приложения в Интернет
 
Bezopasnost i za6tita_na_web_prolojenia
Bezopasnost i za6tita_na_web_prolojeniaBezopasnost i za6tita_na_web_prolojenia
Bezopasnost i za6tita_na_web_prolojenia
 
Защита при създаване на PHP-приложения в Интернет
Защита при създаване на PHP-приложения в ИнтернетЗащита при създаване на PHP-приложения в Интернет
Защита при създаване на PHP-приложения в Интернет
 
Защита при създаването на PHP-приложения
Защита при създаването на PHP-приложенияЗащита при създаването на PHP-приложения
Защита при създаването на PHP-приложения
 
Web Applications Security
Web Applications Security Web Applications Security
Web Applications Security
 
WordPress Security
WordPress SecurityWordPress Security
WordPress Security
 
Защита при създаване на java прил.в интернет
Защита при създаване на java прил.в интернетЗащита при създаване на java прил.в интернет
Защита при създаване на java прил.в интернет
 
FABRIQ - Presentation Nakov 0.8
FABRIQ - Presentation Nakov 0.8FABRIQ - Presentation Nakov 0.8
FABRIQ - Presentation Nakov 0.8
 
Penetration testing for dummies
Penetration testing for dummiesPenetration testing for dummies
Penetration testing for dummies
 
Сигурност при разработката на WordPress разширения
Сигурност при разработката на WordPress разширенияСигурност при разработката на WordPress разширения
Сигурност при разработката на WordPress разширения
 
Защита при създаване на PHP приложения в Интернет
Защита при създаване на PHP приложения в ИнтернетЗащита при създаване на PHP приложения в Интернет
Защита при създаване на PHP приложения в Интернет
 
AJAX и създаване на богати потребителски интерфейси в браузър
AJAX и създаване на богати потребителски интерфейси в браузърAJAX и създаване на богати потребителски интерфейси в браузър
AJAX и създаване на богати потребителски интерфейси в браузър
 
ИнтеRESTни уеб услуги
ИнтеRESTни уеб услугиИнтеRESTни уеб услуги
ИнтеRESTни уеб услуги
 
Php security
Php securityPhp security
Php security
 
11086 browser-security
11086 browser-security11086 browser-security
11086 browser-security
 
Drupal Security
Drupal SecurityDrupal Security
Drupal Security
 

5494 n nikolov_zashtita

  • 1. ИКОНОМИЧЕСКИ УНИВЕРСИТЕТ – ВАРНА ЦЕНТЪР ЗА МАГИСТЪРСКО ОБУЧЕНИЕ КАТЕДРА “ИНФОРМАТИКА” по БЕЗОПАСНОСТ И ЗАЩИТА НА Мicrosoft МРЕЖИ И ПРИЛОЖЕНИЯ на тема “Защита на Web приложения – Cross Site Scripting, SQL Injection” Изготвил: Проверил: Николай Николов доц. д-р Стефан Дражев специалност: Приложна информатика – ДОВО VII курс, I гр., Ф № 5494 Варна 2013
  • 2. Web приложения Традиционните приложения се инсталират или се стартират от диск или друга медиа. Те разчитат на дадена среда, която в общия случай се осигурява от операционната система. При уеб приложенията, за да стартирате приложение използвате браузър. В общия случай приложението се отваря след написване на неговия уеб адрес в браузъра. Днес уеб технологиите позволяват да се създават не само интерактивни и функционални сайтове, но и напълно функционални уеб приложения, с интерфейс, функционалност и бързодействие. Термина уеб приложение може да се дефинира по следния начин: Софтуер, който работи в браузъра. Web-базираните приложения са тясно свързани с Интернет. При тях целият процес на въвеждане, обработване и запазване на информацията се извършва в Глобалната мрежа. Основно предимство на този тип приложения е лесният достъп до тях от която и да е точка на света. Информацията, която се въвежда и променя, обикновено се запазва на отдалечен компютър-сървър, до който трябва да имаме достъп всеки път, когато е необходимо да я актуализираме. Самите уеб сайтове могат до известна степен да се смятат за Web-базирани приложения особено когато става въпрос за динамични сайтове със сложна структура и разширена функционалност. Постоянната активност на такъв тип приложения е друго основно предимство, тъй като услугите, които се предлагат, ще бъдат достъпни 24 часа в денонощието, 7 дни в седмицата (това е идеалният случай). Високото ниво на сигурност на сървърите, разнообразието от модули за управление на данните, както и достъпните цени правят Web- базираните приложения желано средство за работа както за малкия и среден бизнес, така и за големите корпорации. Основен недостатък на този тип приложения е пряката зависимост на системата за управление от редица фактори. Такива са например Интернет- връзката, натоварването на сървъра, където се намира приложението или където се записва информацията, възможността за поява на непозволени действия от страна на някои потребители спрямо системата. Разбира се всички тези потенциални проблеми са разрешими по един или друг начин, но е факт, че те биха могли да доведат до нарушаване безпроблемната работа на Web- приложението и евентуално до загуба на информация. Зaщитaтa нa eднo yeб пpилoжeниe e eдин oт нaй-вaжнитe eтaпи, зaeднo c пpoeктиpaнeтo и oптимизaциятa мy. Aтaкитe дaлeч нe ce cвeждaт caмo дo MySQL Injection и XSS. Имa и oщe мнoгo дpyги, кaтo фaлшиви HTTP зaявки, brute-force aтaки, пyбличнo излaгaнe нa кoд, oткpaдвaнe (фикcиpaнe) нa cecия и дpyги. MySQL Injection и XSS, oбaчe, ca нaй-чecтo cpeщaнитe aтaки, пopaди мнoгoтo caйтoвe yязвими към тяx. Toвa ca aтaки, кoитo ce ocнoвaвaт нa
  • 3. yязвимocти пpи изпpaщaнeтo и пoлyчaвaнeтo нa инфopмaция мeждy пoтpeбитeля и cъpвъpa. Пpaвилoтo, кoeтo тpябвa дa ce cпaзвa, e чe вcичкo, кoeтo влизa и излизa oт бaзaтa дaнни, тpябвa дa ce филтpиpa! He тpябвa дa ce имa дoвepиe и нa никакви дaнни, пpeдcтaвeни oт пoтpeбитeля! Cross Site Script (XSS) атаки Cross Site Scripting (XSS) е атака, която използва уязвимост на приложението и ”вмъква” нежелан код, който се изпълнява в браузъра на крайния потребител. Най-общо казано атаката цели да намери място в програмата, в което се отпечатва стойността на дадена променлива и не се проверява коректно нейното съдържание. Обикновено в съдържанието на променливата се записва HTML, XHTML, JavaScript, ActiveX, VBScript, Flash, и др видове изпълним код. Възможностите за цел на атаката може да са много – придобиване на достъп до защитена зона на сайта (чрез постигане на session hijacking), подвеждане на потребителя да въведе информация към трети източник (physhing), инсталиране на нежелани програми на компютъра на потребителя (virus, worm, trojan, …), и др. Видове XSS атаки: 1. Директни: Атакуващият предоставя връзка или друг вид “маскиран” код към клиента. Когато клиента последва такава връзка той попада на оригиналният уебсайт на дадената услуга, но вече с модифициран код. Тези атаки са възможни най-вече чрез изпратени писма по e-mail. 2. Статични: Нежелания код се вмъква в базата данни след което се изчавка уязвимата страница да бъде отворена. Това са най-честите атаки при т.нар. социални мрежи – форуми, блогове, дискусионни групи, и т.н. 3. DOM: Това са XSS атаки от т.нар. локално ниво. Обикновено се използва уязвимост в скрипт на продукта, чрез който самият софтуер да предизвика директна XSS атака към жертвата. Как да бъде избегнат XSS. Трябва да бъдат спазвани някой правила за да се постигне по-добра защита от XSS атаки. Никога не трябва да се вярваме на потребителите на даден сайт. Всички входящи данни трябва да бъдат валидирани, нормализирани и филтрирани. Задължително трябва да бъдат прехвърлени определени знаци, в съответните им HTML entry и да бъдат изпращани към браузъра само в този вид. Задължително трябва да се конвертират: & -> &amp; < -> &lt; > -> &gt;
  • 4. ” -> &quot; ‘ -> &#x27; / -> &#x2F; Когато към браузъра бъде изпратен &lt; ще го визуализира като < тоест <script ще бъде изпратено като &lt;script , и бразузъра няма да го изпълни като javascript. Не слагайте лични данни и “коментари” на една страница XSS не е само за крадене на сесия, XSS може да вземе цялата HTML страница, или част от нея, и да я изпрати на някой сървър. Тоест ако на страницата за “профил” на потребителя имате някакво поле, чийто данни идват от външни потребители, то ако мине XSS атака, този код, ще може да вземе цялата страница с всички данни на потребителя. HTTPOnly флаг на бисквитките Всеки език позволява този флаг да бъде вдигнат, и повечето браузъри го спазват. Това което прави е, че не позволява на JS да чете тези бисквитки. Тоест ако мине XSS, то кода не може да види бисквитките с този флаг, тоест няма кражба на сесия. На IP не може да се разчита Голяма част от хората са с динамични IP адреси, други минават (доброволно или не) през прокси сървъри, и е възможно 2 заявки от един и същи потребител, да дойдат от 2 различни адреса, дори и заявките да са в рамките на секунда. Някой доставчици правят нещата още по-зле, като AOL , понеже при тях всяка заявка е с различно IP, и на всичко отгоре е и от различен град. Примерна XSS атака към форма, която не е защитена по никакъв начин. Формата е примерна и представлява част от „форма за регистрация“. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Контактна форма</title> </head> <body> <form action="contact_insert12.php" method="post" name="forma12"> <table width=400 border=1>
  • 5. <tr> <td align="left"> <p>Име:<br/> <input type="text" size="20" name="fname" /></p> <p>Фамилия:<br/> <input type="text" size="20" name="lname"/></p> <p>Населено място:<br/> <input type="text" size="20" name="place1"/></p> <input type="submit" name="submit" value="Изпрати"/> </td> </tr> </table> </form> </body> </html> Скрипт към формата, който ще извежда въведените данни <?php if(isset ($_POST['submit'])) { $fname = $_POST['fname']; $lname = $_POST['lname']; $place1 = $_POST['place1']; print 'Име: ' . $fname . '<br /> Фамилия: ' . $lname . '<br /> Град: ' . $place1; } ?> Кодът на нашата атака, който може да се постави в което и да е от текстовите полета: <div style="text-align: center;"><p style="font-family: Verdana; font-style: normal; font-variant: normal; font-weight: bold; font-size: 36px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(255, 0, 0);">This page has been Hacked!</p><img src="http://ha.ckers.org/images/stallowned.jpg" border="0"><p style="font-family: Arial; font-style: italic; font-variant: normal;
  • 6. font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(221, 221, 221);">XSS Defacement</p></div> Резултатът, който ще получим е следния: Ако направим една функция с име security, която ще има два параметъра. Първият ще бъде стринга с данните, който искаме да проверим, а вторият няма да е задължителен и ще бъде за максимална стойност на параметъра. <?php function security($data, $max = null) { if(is_numeric($data)) { if($max == null) { return (int)$data; } else { if($data <= $max) { return (int)$data; } else { return "Въведената стойност е прекалено голяма!"; } } } else {
  • 7. if($max == null) { $data = htmlspecialchars(addslashes($data)); return $data; } else { if(strlen($data) <= $max) { $data = htmlspecialchars(addslashes($data)); return $data; } else { return "Това поле не може да съдържа повече от $max символа"; } } } } if(isset ($_POST['submit'])) { $fname = security ($_POST['fname'], 10); $lname = security ($_POST['lname'], 15); $place1 = security ($_POST['place1'], 15); print 'Име: ' . $fname . '<br /> Фамилия: ' . $lname . '<br /> Град: ' . $place1; } ?> Резултатът, който ще получим е следния
  • 8. Защита от SQL Injection SQLi се използва за злонамерено изпълнение на SQL заявка към базата данни. Чрез тази техника може да бъдат експлоатирани уязвими кодове. SQL инжeктиpaнeтo e нaй-чecтo cpeщaнaтa yязвимocт в PHP пpилoжeниятa. To ce ocнoвaвa нa гpeшкa нa PHP пpoгpaмиcтa, пpи кoятo нe ce филтpиpa инфopмaциятa, пoдaдeнa към бaзaтa дaнни. Чecтo нe ce филтpиpa и въpнaтия peзyлтaт, пpи кoeтo ce paзкpивaт цeнни дaнни и пътищa. Пример за oпacнocт oт MySQL Injection. Aкo cкpипт зa вxoд в cиcтeмaтa имa cинтaкcиc oт poдa: $sql = "SELECT * FROM users WHERE username = '$user' AND password = '$pass'". Aкo към тaзи зaявкa, нapyшитeлят пoдaдe eдиничнa кавичка зa пoтpeбитeлcкo имe и пpoизвoлнa пapoлa, зaявкaтa щe въpнe cлeднaтa гpeшкa: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE username = ' ' ' AND password = 'sometext C мнoгo мaлкo paбoтa (пoдaвaнe нa кaвичкa), нapyшитeлят вeчe знae имeнaтa нa двe кoлoни oт тaблицaтa и тoвa, чe дaннитe и в двeтe пocoки нe ca филтpиpaни пpaвилнo. Hapyшитeлят знae и cинтaкcиca нa клayзaтa WHERE, oт къдeтo мoжe дa cи cглoби зaявки зa вcичкo, кoeтo мy тpябвa, например: myuser ' or 'foo' = 'foo' -- Aкo тoвa ce въвeдe кaтo пoтpeбитeлcкo имe, нapyшитeлят щe влeзe ycпeшнo в cиcтeмaтa, бeз дa имa нитo пoтpeбитeлcкo имe, нитo пapoлa. A aкo нapyшитeлят знae пoтpeбитeлcкo имe c нyжнитe мy пpaвa, тoй мoжe дa влeзe и c нeгo, бeз дa мy ce нaлaгa дa знae пapoлaтa, пpocтo въвeждa зa пoтpeбитeл: cloxy' -- SQL инжeктиpaнeтo може да бъде избегнато. Вcички пpoмeнливи, кoитo ce вкapвaт в eднa MySQL зaявкa, тpябвa дa бъдaт филтpиpaни c фyнкциятa mysql_real_escape_string(). B гopния пpимep, тoвa ca пpoмeнливитe $user и $pass. Cинтaкcиcът e както cлeдвa: $user = mysql_real_escape_string($user) и тaкa зa $pass. Най-лесния начин да се предпазите от SQL инжекции е да филтрирате всички входящи данни. Например , чрез функциите: htmlspecialchars(); addslashes(); и trim();
  • 9. Функции htmlspecialchars() - преобразува специални знаци в html единици addslashes() - екранира специалните знаци на даден стринг trim() - премахва знаци в началото и края на даден стринг htmlentities() - преобразува всички подходящи знаци в HTML единици и е .. сходна с htmlspecialchars(); Допълнителна защита може да бъде написването на скрипт, който проверява за грешни пароли - при 3 грешни опита за вход с грешна парола в базата данни, акаунта се заключва за 15 минути. Причини за уязвимости към SQLi в системата могат да възникнат в тези случай: - Без филтриране на входящите данни - Уязвимост в сървъра на базата данни Методи за защита от SQL инжекция: - Филтриране на данните - Изключване на докладите за грешки. - Създаване на потребител, с по-малко привилегии. - Максимална стойност
  • 10. Използвана литература C. Snider, T. Mayer, M. Southwell, “Pro PHP Security” - Second edition J. Grossman, R. Hansen, P. Petkov, A. Rager, “XSS Attacks” R. Alvarez, D. Hartley, J. Hamler, H. Meer, “SQL Injection” http://web-tourist.net https://www.owasp.org http://gatakka.eu http://www.cphpvb.net