Разработка сайта для Вашего бизнеса. Веб дизайн. Дизайн логотипа, фирменного стиля, рекламная фотография . Комплексный рекламный креатив.

Ralex. We do the work.
На рынке с 1999го года. Средняя ценовая категория. Ориентация на эффективность решений.
Ознакомтесь с нашим портфолио
Узнайте больше о услугах
Свяжитесь с нами:
E-mail: [email protected]
Tel: (044) 587 - 84 - 78
Custom web design & дизайн и разработка сайта "под ключ"
Креативный, эффективный дизайн. Система управления сайтом (СУС).
Custom flexible разработка систем электронной коммерции
Система e-commerce разрабатывается под индивидуальные потребности. Гибкая функциональность.
Search Engine Optimzation & оптимизация под поисковые системы (SEO)
Постоянная оптимизация и мониторинг сайта в поисковых системах. Достигаем результата быстро и эффективно
Custom logo design & дизайн логотипа и фирменного стиля
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.
профессиональная рекламная фотография
креативно, смело, качественно
Custom logo design & рекламный креатив. дизайн рекламы
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.

Програмування з використанням PHP і MySQL в розробці Web-додатків. Частина 4. Реалізація безпечних транзакцій за допомогою PHP і MySQL

  1. Серія контенту:
  2. Цей контент є частиною серії:
  3. Використання протоколу SSL
  4. Перевірка даних, що вводяться користувачем
  5. Досягнення безпечного зберігання даних
  6. застосування шифрування
  7. Малюнок 1.
  8. код скрипта
  9. Ресурси для скачування

Серія контенту:

Цей контент є частиною # з серії # статей:

Наша взаимовыгодная связь https://banwar.org/

https://www.ibm.com/developerworks/ru/library/?series_title_by=**auto**

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії:

Слідкуйте за виходом нових статей цієї серії.

Дана стаття буде присвячена питанням безпечної обробки даних користувача при їх введенні, пересилання і збереження. Дотримуючись цих правил, можна безпечно здійснювати захищені з обох сторін транзакції між користувачем і сервером.

У загальному випадку, забезпечення безпеки транзакцій зводиться до контролю за потоком інформації і забезпечення його захищеності в кожній конкретній точці.

Жодна комп'ютерна система не може вважатися цілком безпечною для проникнення. При цьому під безпекою розуміється паритетне відповідність між зусиллями, витраченими на злом системи, і значимістю самої інформації.

Контроль за що входить в систему інформацією повинен здійснюватися на всіх рівнях. Кожна транзакція між Web-додатком і користувачем починається з посилки браузером з додатком запиту на виконання. Якщо сторінка містить PHP-сценарій, то Web-сервер передає повноваження на обробку цього сценарію механізму PHP. При обробці даних сценарій записує їх на диск або отримує з диска для включення в основний скрипт за допомогою функції include () або require ().

PHP може взаємодіяти і з СУБД, що, в кінцевому рахунку, також призведе до звернення до диска. У разі використання MYSQL механізми останнього відповідають за зчитування і запис даних на диск.

Загалом, така система складається з трьох компонентів. Це система сервера, середа Інтернет і комп'ютер користувача.

Забезпечення безпеки призначених для користувача ПК лягає на плечі самих користувачів. Характеристики безпеки Інтернет теж не піддаються контролю і, хоча його не можна контролювати, можна врахувати його особливості при проектуванні системи. Передаючи інформацію через Інтернет, потрібно пам'ятати, що вона може бути переглянута або видозмінена іншими користувачами. При цьому бажано зробити:

  • установку цифрового підпису під інформацією перед її пересиланням для захисту від підробки;
  • шифрування інформації перед пересиланням, щоб зберігати її в таємниці і захистити від підробки;
  • вишукування іншого способу передачі інформації, більш надійного, ніж мережу Інтернет.

Існують, щонайменше, два способи захисту інформації, яка надходить на Web-сервер або йде з нього. Це використання SSL (Secure Sockets Layer) - протоколу захищених сокетів, або S-HTTP (Secure Hypertext Transfer Protocol) - протокол захищеної передачі гіпертексту.

Обидві технології забезпечують захищений від злому обмін інформацією і аутентифікацію. При цьому SSL поширений набагато ширше, ніж S-HTTP.

Використання протоколу SSL

Спочатку сімейство протоколів SSL було розроблено для забезпечення безпечних з'єднань браузерів і серверів. Рівень SSL знаходиться між транспортним рівнем і рівнем додатків. Перш ніж передати дані транспортному рівню, SSL видозмінює їх. Застосування SSL не обмежується тільки використанням його в рамках HTTP. З таким же успіхом він може застосовуватися і при реалізації захищених з'єднань з іншими протоколами рівня додатків.

Коли Web-браузер з'єднується з безпечним Web-сервером по HTTP, обидві сторони використовують протокол установки з'єднання (квітірованія). Він дозволяє взаємодіючим сторонам домовлятися про аутентифікації і шифрування.

Процес квітірованія складається з:

  • з'єднання браузера і сервера, що підтримує SSL і початок процесу аутентифікації;
  • відповіді сервера у вигляді свого цифрового сертифікату;
  • відповідного запиту сервером у браузера аутентифікації;
  • посилки браузером списку підтримуваних їм алгоритмів шифрування і хешування. Сервер вибирає найбільш надійне з них;
  • генерації браузером і сервером ключів для сеансу;
  • отримання браузером відкритого ключа сервера з його цифрового сертифікату та використання його для шифрування випадкового числа;
  • відповіді сервера у вигляді відправки випадкових даних в текстовому форматі;
  • на основі отриманих даних за допомогою хеш-функції генеруються ключі шифрування для сеансу.

Генерування стійких до злому випадкових даних, дешифрування цифрових сертифікатів, генерування ключів та використання шифрування з відкритим ключем вимагає великих витрат часу. Але результати такої роботи можливо кешувати, тому для обміну декількома повідомленнями можливе використання раніше встановлених даних.

При пересиланні даних по SSL-з'єднання виконуються наступні дії:

  • дані поділяються на керовані пакети;
  • кожен пакет стискається;
  • в кожному пакеті міститься код аутентифікації повідомлення (MAC), обчислений за допомогою алгоритму хешування;
  • зашифровані пакети об'єднуються з інформацією заголовків і пересилаються по мережі.

Перевірка даних, що вводяться користувачем

Одна з головних задач при роботі надійного Web-додатки - це ніколи не довіряти даним, які вводяться користувачами. До приміщення їх в файл або базу даних, або при передачі на виконання іншій команді всі дані, що надійшли від користувача, повинні бути обов'язково перевірені. PHP має широкі можливості для організації такої перевірки. Наведемо деякі з них.

  1. Використання функції addslashes () для фільтрації даних до їх введення в базу або в файл. Ця функція скасовує значення символів, які можуть викликати проблеми при їх приміщенні в базу. Для реверсивного повернення використовується функція stripslashes ();
  2. Включення в файлі php.ini директив magic_quotes_gpc і magic_quotas_runtime. Директиви автоматично додають і прибирають відповідно керуючі символи косою риси, причому magic_quotes_gpc робить це для вхідних змінних методів GET, POST і cookie-наборів, а magic_quotas_runtime - для даних, які використовуються базою даних;
  3. Функція escapeshellcmd () використовується при передачі даних від користувача командам system () або exec () або стосовно символу зворотної одиночної лапки. Ця функція скасовує будь метасимвол, який за певних умов може бути використаний для запуску системних команд у зловмисних цілях;
  4. При необхідності видалення з рядків PHP або HTML дескрипторів застосовують функцію strip_tags (). Вона не дозволяє працювати сценаріями всередині даних, переданих сервером браузеру;
  5. Перетворенням деяких символів в їх HTML-еквіваленти займається функція htmlspecialshars (). Наприклад, символ <перетворюється в & lt ;. Цим досягається перетворення будь-яких дескрипторів сценарію в безпечні символи.

Досягнення безпечного зберігання даних

При оцінці питання безпечного зберігання даних потрібно враховувати відмінності типів даних, що зберігається. Це HTML- і PHP-файли, дані сценаріїв або дані MySQL. Кожен тип вимагає своїх запобіжних заходів. Зазвичай їх розміщують в різних областях диска. Найнебезпечнішим з них є виконувався вміст. На Web-сайтах до цього типу зазвичай належать сценарії. Особливої ​​обережності вимагає визначення прав доступу сценаріїв в загальній Web-ієрархії - каталогах, що починаються з htdocs (для apache) або inetpub (для IIS). Не можна надавати права запису або зміни сценаріїв в цих каталогах тим, хто не має цього робити в рамках загальної логіки роботи. Такі права зазвичай даються тільки власникам сценаріїв. Якщо скриптів потрібно мати можливість записувати у файли, то такі файли слід розташовувати поза ієрархії Web-каталогу. Головне - не змішувати сценарії і записуються ними дані.

Якщо зломщикові вдасться проникнути на сервер і прочитати якісь файли, то йому, швидше за все, вдасться і розібратися в ключах для шифрування. Тому, якщо при захисті файлів на сервері використовувати механізми шифрування, то програмне забезпечення і ключі шифрування повинні зберігатися на іншому комп'ютері.

Дані в базі зберігаються приблизно таким же чином, як і файли. При правильному налаштуванні MySQL тільки вона може записувати або змінювати інформацію у себе в файлах. При цьому важливо забезпечити правильний доступ користувачів до СУБД в рамках повноважень MySQL.

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

застосування шифрування

Багато років стандартом для шифрування є PGP, розроблений Філіпом Циммерманом. Безкоштовні версії цього пакета можна застосовувати тільки в некомерційних цілях. Всі подробиці по використанню цього програмного пакета знаходяться на сайті http://pgp.com .

Є альтернатива використання PGP - її вільна версія GPG. Вона не містить патентованих алгоритмів і може використовуватися в комерційних цілях без будь-яких обмежень. Завантажити її можна з сайту http://www.gnupg.org . Обидва пакети дозволяють застосовувати шифрування не тільки для файлових систем, але і, наприклад, для шифрування електронної пошти. Крім того, дуже часто буває необхідно саме через електронну пошту зв'язатися з клієнтом сайту і передати йому необхідну інформацію. Якщо мова йде про систему електронних торгів, то в такій ситуації важко переоцінити цілісність і конфіденційність інформації, що передається.

Як приклад розглянемо пересилання поштового повідомлення з PHP-скрипта, зашифрованого за допомогою GPG.

Користувачеві надається HTML-форма (рисунок 1), в якій він заповнює поля адреси, теми і повідомлення і відправляє його адресату. Якщо з'єднання з сервером відбувається не через SSL, то видається попередження: «ПОПЕРЕДЖЕННЯ: ви підключити не через SSL. Повідомлення може бути прочитано сторонніми ».

Малюнок 1.
Код форми:
<Html> <body> <h1> Відправ мені приватне повідомлення </ h1> <? Php // Цей рядок необхідно змінити, якщо не використовуються порти // за замовчуванням (порт 80 для звичайного трафіку і порт 443 для SSL) if ($ _SERVER [ 'SERVER_PORT']! = 443) echo '<p> <font color = "red"> ПОПЕРЕДЖЕННЯ: ви підключилися до цій сторінці не через SSL. Ваше повідомлення може бути прочитано іншими. &lt;/ Font> </ p> '; ?> <Form method = "post" action = "send_private_mail.php"> <br /> Вашу адресу електронної пошти: <br /> <input type = "text" name = "from" size = "38"> <br /> Тема: <br> <input type = "text" name = "title" size = "38"> <br /> Ваше повідомлення: <br /> <textarea name = "body" cols = "30" rows = "10"> </ textarea> <br /> <input type = "submit" value = "Відправити"> </ form> </ body> </ html>

Дані форми передаються на вхід скрипту.

Скрипт працює, доставляючи пошту за адресою $ to_email. При використанні цієї програми змініть цю змінну на реальне значення.

Можна використовувати дані з СУБД для підстановки потрібних адрес.

Рядок putenv ( 'GNUPGHOME = / tmp / .gnupg'); повинна відображати місцезнаходження вашого набору ключів GPG. В системі Web-сервер запускається від імені користувача nobody, а початковим каталогом є / tmp /.

Функція tempnam () застосовується для створення унікального імені тимчасового файлу. Можливо вказівку і каталогу, і префікса імені. Дані файли створюються і видаляються протягом декількох секунд, тому їх імена можуть бути довільними.

Оператор system ($ command, $ result); виконує інструкції, записані в рядку $ command, і привласнює повертається значення змінної $ result.

Після того як тимчасові файли перестають бути потрібними, вони видаляються за допомогою функції unlink (). Це призводить до того, що призначена для користувача пошта в незашифрованому вигляді зберігається на сервері досить довго. Навіть якщо Web-сервер вийде з ладу, файл залишиться цілим і буде перебувати на сервері.

З'єднання без участі SSL перевіряється шляхом аналізу змінної $ _SERVER [ 'SERVER_PORT']. За замовчуванням SSL-з'єднання має порт 443, а будь-які інші сполуки приведуть до помилки.

Можна обробити цю ситуацію по-іншому, шляхом перенаправлення користувача на той же інтернет-адреса, але через SSL-з'єднання. Важливо, щоб призначені для користувача дані, введені в форму, передавалися по захищеному з'єднанню, а не здійснювалася захищена передача самої форми.

Можна задати повну адресу в параметрі action HTML дескриптора form.

Якщо змінити його на вигляд:

<Form method = "post" action = "https: //web-server/send_private_mail.php">

то дані будуть передаватися сервера через SSL-з'єднання, навіть якщо користувач його не використовує, що підвищить безпеку з'єднання в цілому.

код скрипта
<? Php // Створення коротких імен змінних $ from = $ _POST [ 'from']; $ Title = $ _POST [ 'title']; $ Body = $ _POST [ 'body']; $ To_email = 'alex @ localhost'; // Вкажіть gpg, де знаходиться набір ключів. // У даній системі домашнім каталогом користувача nobody є / tmp / putenv ( 'GNUPGHOME = / tmp / .gnupg'); // Створення унікального імені файлу $ infile = tempnam ( '', 'pgp'); $ Outfile = $ infile. '. Asc'; // Запис у файл тексту, введеного користувачем $ fp = fopen ($ infile, 'w'); fwrite ($ fp, $ body); fclose ($ fp); // Налаштування параметрів команди $ command = "/ usr / local / bin / gpg -a \\ --recipient 'Luke Welling <[email protected]>' \\ --encrypt -o $ outfile $ infile"; // Виконання команди gpg system ($ command, $ result); // Видалення незашифрованого тимчасового файлу unlink ($ infile); if ($ result == 0) {$ fp = fopen ($ outfile, 'r'); if (! $ fp || filesize ($ outfile) == 0) {$ result = -1; } Else {// Читання зашифрованого файлу $ contents = fread ($ fp, filesize ($ outfile)); // Видалення зашифрованого тимчасового файлу unlink ($ outfile); mail ($ to_email, $ title, $ contents, "From: $ from \ n"); echo '<h1> Повідомлення надіслано </ h1> <p> Ваше повідомлення зашифровано і відправлено. </ p> <p> Спасибі. <p>'; }} If ($ result! = 0) {echo '<h1> Помилка! </ H1> <p> Ваше повідомлення не може бути зашифровано, тому воно не відправлялося. </ P> <p> Вибачте. &lt;/ P> '; }?>

висновки

У статті розглянуті основні питання забезпечення безпечних транзакцій шляхом перевірки проходження інформаційного потоку на всіх рівнях взаємодії. При цьому під рівнями малися на увазі такі етапи формування потоку, як комп'ютер користувача, мережа Інтернет і сервер, який приймає запити на обробку.

Захист інформації на стороні користувача повинна контролюватися самим користувачем. Мережа Інтернет контролювати не можна, але через неї можна забезпечити безпечне поширення даних. Для цієї мети застосовують протокол SSL (Secure Sockets Layer) і HTTPS (Secure Hypertext Transfer Protocol). Обидві технології забезпечують приватний, захищений від злому обмін повідомленнями і аутентифікацію.

Коротко розглянуто застосування протоколу SSL і порядок взаємодії клієнта і сервера в рамках цього протоколу.

Розглянуто питання перевірки даних, що вводяться користувачем і передаються на вхід виконуваного сценарію сервера. Описано функції PHP, які займаються такою перевіркою.

Коротко розглянуті питання забезпечення безпечного зберігання даних, в тому числі в базі даних MySQL.

Розглянуто питання застосування шифрування інформації з використанням GPG.

На конкретному прикладі розглянута форма, яка служить основою для передачі шифрованого повідомлення даних, а так само скрипт, що викликає GPG і забезпечує необхідну шифрування для переданих даних. Описана робота сценарію і способи безпечного з'єднання з сервером.

<Попередня стаття | Наступна стаття>

Ресурси для скачування

Підпишіть мене на повідомлення до коментарів

Com/developerworks/ru/library/?
Lt;/ Font> </ p> '; ?
Lt;/ P> '; }?
Категории
  • Биология
  • Математика
  • Краеведению
  • Лечебная
  • Наука
  • Физике
  • Природоведение
  • Информатика
  • Новости

  • Новости
    https://banwar.org/
    Наша взаимовыгодная связь https://banwar.org/. Запустив новый сайт, "Пари Матч" обещает своим клиентам незабываемый опыт и возможность выиграть крупные суммы.


    Наши клиенты
    Клиенты

    Быстрая связь

    Тел.: (044) 587-84-78
    E-mail: [email protected]

    Имя:
    E-mail:
    Телефон:
    Вопрос\Комментарий: