Функція mysqli_real_escape_string в php

Функція mysqli_real_escape_string () - екранує спеціальні символи в рядку, використовуваної в SQL-запиті, прінмімая до уваги кодування з'єднання, таким чином, що результат можна безпечно використовувати в SQL-запиті в функціонально mysqli_query ().

mysqli_real_escape_string (ідентифікатор сервера MySQL, рядок)

Розглянемо приклад використання цієї функції. Спочатку в прикладі створимо таблицю в базі 'tester', потім будемо додавати в неї дані.

Але що буде, якщо користувач передасть такі дані:

В цьому випадку відбудеться збій при додаванні користувача, функція mysqli_error () виведе текст помилки: "You have an error in your SQL syntax.", Що в принципі не дуже критично для системи в цілому.

Тепер розглянемо ситуацію, коли ми оновлюємо дані SQL-запитом UPDATE.

Візьмемо той же самий код, тільки трохи змінимо його.

Цей код буде працювати, поки користувач не передасть дані:

В такому випадку ми отримаємо SQL-запит:

UPDATE users SET password = '' #

Тепер вирішуємо проблему за допомогою функції mysqli_real_escape_string ().

Звичайно, алгоритм цього коду не ідеальний, але він писався тільки для того, щоб продемонструвати необхідність функції mysql_real_escape_string ().

Приклад знешкодження даних для MySQL

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

Властивість «чарівних лапок» не рекомендується використовувати починаючи з PHP 5.3.0, а з PHP 6.0.0 воно взагалі було видалено.

Ось коректне рішення для знешкодження даних, введених користувачем, прийнятне для MySQL:

Функція get_magic_quotes_gpc () - отримує поточну активну установку конфігурації "магічних" лапок gpc. Повертає TRUE, якщо властивість «чарівних лапок» знаходиться в активному стані.

Якщо властивість «чарівних лапок» включено, то будь-які додані слеші підлягають видаленню, в іншому випадку функція mysql_real_escape_string () може відключити деякі символи двічі, зробивши рядки не придатними для подальшої роботи.

Функція stripslashes () - видаляє екранування символів.

Ось ще один приклад:

Тут додається функція htmlspecialchars (). яка перетворює спеціальні символи в HTML суті.

В HTML деякі символи мають спеціальне значення і для збереження свого значення повинні бути перетворені в HTML суті. Ця функція повертає рядок, над якою проведені деякі з таких перетворень. Цих перетворень досить для більшості завдань веб-програмування. Якщо вам потрібно перетворити всі можливі суті, використовуйте htmlentities ().

html_entity_decode - навпаки, перетворює все HTML-суті до відповідних символи, вона є протилежністю функції htmlentities ().