Page 92 - 4636
P. 92

запит  за  допомогою  методів  mysqli_query  або  mysqli::  запит.  Для  виконання  декількох
        запитів  слід  скористатися  методами  mysqli_multi_query  або  mysqli:  :multi_query,  які
        запобігають виконання зайвих і потенційно шкідливих операторів або запитів.
              Літералізація вихідних даних
              Крім фільтрації вхідних даних, не менш важливо і літералізувати вихідні дані. Коли значення,
        введені  користувачем,  є  в  системі,  важливо,  щоб  вони  не  змогли  завдати  якої-небудь  шкоди  або
        ненавмисні  дії.  Це  можна  забезпечити  за  допомогою  пари  функцій,  які  перевіряють,  що  подібні
        значення будуть виступати в клієнтському веб-браузері як текст. Існують такі програми, де в принципі
        можна  було  б  взяти  дані,  введені  користувачем,  і  вивести  їх  на  який-небудь  сторінці.  Чудовими
        прикладами таких ситуацій можуть служити користувальницькі коментарі до опублікованої статті або
        електронні  дошки  оголошень.  У  таких  випадках  необхідно  стежити,  щоб  користувачі  не  змогли
        вставити у текст, який вводиться, шкідливу HTML-розмітку. Один з найбільш легких способів зробити
        це  полягає  в  застосуванні  функції  htmlspecialchars  або  htmlentities.  Ці  функції
        перетворюють  певні  символи  у  вхідному  рядку  в  символьні  підстановки  HTML.  Символьні
        підстановки  -  це  спеціальні  послідовності  символів,  які  починаються  з  символу  амперсанда  (&)  і
        позначають  спеціальні  символи,  які  важко  вставити  в  HTML-код  не-посередньо.  Після  символу
        амперсанда знаходиться  ім'я підстановки, а потім крапка з комою (;). Символьна підстановка може
        мати  й  інший  вигляд:  десятковий  ASCII  -  код  символу  з  символом  #  -  наприклад,  /  замість
        символу прямого слеша (/).  Наприклад, всі  елементи розмітки  HTML позначені  символами <і  >,  і
        тому їх важко ввести в виведений контент (оскільки браузер за замовчуванням вважає, що в кутових
        дужках містяться дескриптори). Щоб не плутати браузер, можна використати підстановки < і>.
        Аналогічно,  для  включення  в  HTML-код  символу  амперсанда  призначена  підстановка  &аmр;.
        Одиночні  та  подвійні  лапки  подаються  відповідно  як  '  і  ".  Символьні  підстановки
        перетворюються в HTML - клієнтом (тобто веб-браузером) і тому не вважаються частиною розмітки.
        Відмінність між функціями htmlspecialchars або htmlentities полягає в тому, що перша з
        них  за  замовчуванням  замінює  тільки  символи  &,  <і>  і,  можливо,  одиночні  і  подвійні  лапки.  У
        htmlentities замінює все, для чого існують іменовані підстановки. Прикладами таких символів
        можуть  служити  символи  авторського  права  ©    (представляється  як  і  &сору;)  і  символ  грошової
        одиниці  євро  (представляється  як  €).  Однак  ця  функція  не  перетворює  символи  в  їх  числові
        підстановки. Обидві функції приймають другий аргумент, який вказує, перетворювати в підстановки
        одиночні та подвійні лапки, а також третій аргумент - набір символів, який слід перетворити вхідний
        рядок (це дуже важливо для нас, оскільки нам потрібно працювати з кодуванням UTF-8).  Можливі
        значення другого параметра:
              ENT_COMPAT - подвійні лапки замінюються на ", а поодинокі залишаються без зміни;
              ENT_QUOTES - одиночні та подвійні лапки замінюються відповідно на' і "
              ENT_NOQUOTES (за замовчуванням) - одиночні та подвійні лапки залишаються без зміни.
           Розглянемо такий текст:
           $input_str = "<р align=\"center\">Користувач дав нам
           \"15000€\".</р><script type=\"text/javascript\">// Шкідливий
           JavaScript-код.</script>";
           Тепер  опрацюємо  його  наступним  РНР-сценарієм  (тут  застосовується  функція  nl2br,  щоб
        забезпечити акуратне форматування в браузері):
           <?php$str=htmlspecialchars($input_str, ENT_NOQUOTES, "UTF-8");
           echon12br($str);$str = htmlentities($input_str, ENT_QUOTES, "UTF-
           8");ехо nl2br($str);??>
           Тоді ми отримаємо такий текстовий результат:



                                                            89
   87   88   89   90   91   92   93   94   95   96   97