Тема: Шифрування даних. Стаття

Спочатку невеличке інтро

Стаття намалювалась із простого питання:

Анатолій написав:

Хай всім, я саме порядок наводжу в себе на сайті, то перебираю власні статті, про реєстрацію,
авторизацію на ресурсі,... але можливо ще де помилки, то вибачайте лиш чищу...
Між іншим ось таке питання, думав в себе в топіку спитати,  але якщо доречна тема є то й тут запитаю,
питання слідуюче, Якщо ми використовуємо шифрування паролю на стороні серверу, скажімо ось так:

$password = md5($password);

то передача самого паролю до серверу йде запитом POST, а от цікаво чи є сенс кодувати пароль ще на стороні клієнта? Скажімо той же md5 засобами javascript, чи то вже лишнє і воно того не варте, так як відправлення даних форми методом POST теж в деякій мірі кодоване.

на що отримав відповідь :

221VOLT написав:

на мою думку немає сенсу кодувати на клієнті - краще відправляти по https (тобто вчепити на сервері сертифікат шифрування) (таким чином всі дані при відправці шифруються браузером)
без сертифікату ваш пароль ловиться у вай-фай мережі і не тільки, ловиться mitm атакою (man in the middle) між вами і сервером - у провайдера, ще десь...
за умови наявності сертифіката - зашифровані дані розшифрувати на порядки складніше
також на сервері краще робити

$salt1='some string ffF zx $$%$$78&*%%';
$salt2='some other long string with ZZZzz#4@*()-=\/';
$password = md5($salt1.$password.$salt2);

таким чи подібним чином ви ускладните взломщику можливість підібрати пароль за допомогою rainbow таблиць чи перебором з хешуванням напряму у себе у випадку якщо у вас якимось чином злили бд/таблицю з паролями користувачів
звісно це не захистить вас у випадку якщо файли також злили
проте на практиці sql inject зустрічається частіше ніж можливість залити свої будь-які файли на чужий сервер

та

VTrim написав:

З PHP5.5
Є password_hash() - хешування та password_verify() - перевірка.
На основі crypt()

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

http://не-дійсний-домен/pictures_06/security_conection.jpg
Шифрування даних

зміст
Інтро.
Навіщо взагалі щось шифрувати в Інтернеті?
Глосарій криптографії.
Коротко про шифрування.
Знайомство із HTTPS.
Що означає HTTPS?
Принцип роботи безпечного з'єднання.
Цифровий сертифікат.
Що таке MitM-атака?
Висновок. Що ж я дізнався?

Інтро

Поняття "Безпеки даних в Інтернеті" звучить серйозно :) . Ціль статті здається проста, якщо ж розглядати в контексті застосування Баз Даних, - то, де-не-де, але ж відразу з'являється думка: "- А що ж якщо дані викрадуть?", доречніше навіть: "- А якщо паролі викрадуть?".
Особисто я взагалі не спеціаліст з веб-безпеки, але цікаво, ж що з приводу безпеки даних каже містер Інтернет.

цікаво!

Більшість з нас постійно використовують шифрування, хоча і не завжди знають про це. Якщо у вас встановлена операційна система Microsoft, то знайте, що Windows зберігає про вас (як мінімум) таку секретну інформацію:
• паролі для доступу до мережевих ресурсів (домен, принтер, комп'ютери в мережі і т.п.);
• паролі для доступу в Інтернет за допомогою DialUр;
• кеш паролів (в браузері є така функція - кешувати паролі, і Windows зберігає всі коли-небудь вводяться вами в Інтернеті паролі);
• сертифікати для доступу до мережевих ресурсів і зашифрованих даних на самому комп'ютері.
Ці дані зберігаються в SAM-файлі (Windows NT/2000/XР). Це файл Реєстру Windows, і тому операційна система нікому не дасть до нього доступу навіть на читання. Зловмисник може скопіювати такі файли, тільки завантажившись в іншу ОС або з дискети. Утиліт для їх злому досить багато, найсучасніші з них здатні підібрати ключ за кілька годин.


2. Навіщо взагалі щось шифрувати в Інтернеті?

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


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

Криптографія (від грецького kryptos — прихований і graphein — писати) — наука про математичні методи забезпечення конфіденційності, цілісності і автентичності інформації. Розвинулась з практичної потреби передавати важливі відомості найнадійнішим чином.
Шифрування — оборотне перетворення даних, з метою приховання інформації.
Центр сертифікації - (англ. Certification authority, CA) - сторона (відділ, організація), чия чесність незаперечна, а відкритий ключ широко відомий. Завдання центру сертифікації - підтверджувати справжність ключів шифрування за допомогою сертифікатів електронного підпису.
Наприклад ресурс - Ukrnames
Цифровий сертифікат - цифровий документ, що підтверджує відповідність між відкритим (публічним) ключем і інформацією, що ідентифікує власника ключа. Найчастіше супроводжує певне електронне повідомлення і використовується, щоб засвідчити, що відкритий ключ належить саме тому власнику, чиї дані зазначено в ньому.
Асиметричні криптосистеми — ефективні системи криптографічного захисту даних, які також називають криптосистемами з відкритим ключем. В таких системах для зашифровування даних використовується один ключ, а для розшифровування — інший ключ (звідси і назва — асиметричні). Перший ключ є відкритим і може бути опублікованим для використання усіма користувачами системи, які шифрують дані. Розшифровування даних за допомогою відкритого ключа неможливе. Для розшифровування даних отримувач зашифрованої інформації використовує другий ключ, який є секретним. Зрозуміло, що ключ розшифровування не може бути визначеним з ключа зашифровування.
http://не-дійсний-домен/pictures_06/key_cryptography.svg.png
Відкритий ключ (англ. public key) - асиметричні системи шифрування, шифрування в криптографічній системі, коли відкритий ключ передається по відкритому (незахищеному) каналу зв'язку та використовується для перевірки електронних підписів або шифрування повідомлень. Для розшифрування повідомлень використовується закритий ключ.
Закритий (секретний, приватний) ключ (англ. private key) - асиметричні системи шифрування, секретний ключ для розшифровування повідомлень.
HTTPS — схема URI, що синтаксично ідентична http: схемі, яка зазвичай використовується для доступу до ресурсів Інтернет. Використання https:URL вказує, що протокол HTTP має використовуватися, але з іншим портом за замовчуванням ( порт 443) і додатковим шаром шифрування/автентифікації між HTTP і TCP. Ця схема була винайдена у компанії Netscape Communications Corporation для забезпечення автентифікації та шифрування комунікацій і широко використовується в Інтернеті у програмному забезпеченні, в якому важлива безпека комунікацій, наприклад, у платіжних системах та корпоративних логінах.
Схема URI - Уніфікований ідентифікатор ресурсів (англ. Uniform Resource Identifier, URI) — компактний рядок літер, який однозначно ідентифікує окремий абстрактний чи фізичний ресурс. Основне призначення таких ідентифікаторів — зробити можливою взаємодію з представленнями ресурсів через мережу, переважно Всесвітнє павутиння, використовуючи спеціальні протоколи. URI визначається схемами, які визначають синтаксис та відповідні протоколи. Найбільш поширеною формою URI є уніфікований локатор ресурсів (URL), який неофіційно називають веб-адресою.
SSL- (англ. Secure Sockets Layer — рівень захищених сокетів) — криптографічний протокол, який забезпечує встановлення безпечного з'єднання між клієнтом і сервером. Протокол забезпечує конфіденційність обміну даними між клієнтом і сервером, що використовують TCP / IP, причому для шифрування використовується асиметричний алгоритм з відкритим ключем.
TLS (англ. Transport Layer Security — захист на транспортному рівні), як і його попередник SSL — криптографічний протокол, що надає можливості безпечної передачі даних в Інтернет для навігації, отримання пошти, спілкування та передачі інших даних.
Криптографічний протокол (англ. Cryptographic protocol) — це абстрактний чи конкретний протокол, що включає набір криптографічних алгоритмів. В основі протоколу лежить набір правил, що регламентують використання криптографічних перетворень та алгоритмів в інформаційних процесах.
Атака посередника, атака «людина посередині», MITM-атака (англ. Man in the middle) — термін в криптографії, що позначає ситуацію, коли криптоаналітик (атакувальник) здатний читати та видозмінювати за своєю волею повідомлення, якими обмінюються кореспонденти, причому жоден з останніх не може здогадатися про його присутність в каналі.

4. Коротко про шифрування
Шифрування - це спосіб зміни повідомлення або іншого документа, що забезпечує спотворення (приховування) його вмісту. Кодування - це перетворення звичайного, зрозумілого, тексту в код. При цьому мається на увазі, що існує взаємно однозначна відповідність між символами тексту (даних, чисел, слів) і символьного коду - в цьому принципова відмінність кодування від шифрування. Часто кодування і шифрування вважають одним і тим же, забуваючи про те, що для відновлення закодованого повідомлення, достатньо знати правило підстановки (заміни). Для відновлення ж зашифрованого повідомлення крім знання правил шифрування, потрібно і ключ до шифру.
http://не-дійсний-домен/pictures_06/anchient_cipher.jpg
Шифрування з'явилось близько 4 тис. років назад. Першим відомим зразком шифру вважається єгипетський текст, створений приблизно в 1900 р. до н. е., в якому замість звичних для єгиптян ієрогліфів використовувались інші символи.
Існують симетричні та асиметричні методи шифрування.
В симетричному шифруванні один і той самий ключ (що зберігається в секреті) використовується як для шифрування, так і для розшифрування. Проблемою симетричного шифрування є необхідність передачі ключа, для розшифрування інформації, таким чином ключ може бути перехоплений кимось іншим. Будь хто, знаючи секретний ключ, може розшифрувати інформацію.
В асиметричному шифруванні є два пов'язаних ключа — пара ключів. Відкритий ключ (англ. public key) — публічний, до нього повинні мати доступ всі ті, хто матиме потребу зашифрувати інформацію. Тоді як закритий ключ — приватний ключ (англ. private key), повинен бути доступним лише тому хто має право розшифрувати інформацію.
Будь-яку інформацію, зашифровану за допомогою відкритого ключа можна розшифрувати лише застосовуючи той самий алгоритм, але з використанням відповідного приватного ключа. Також всю інформацію, зашифровану за допомогою приватного ключа, можна розшифрувати лише за допомогою відповідного відкритого ключа. Це означає, що немає необхідності хвилюватись за передачу ключа, відкритий ключ повинен бути публічним. Але асиметричне шифрування є значно повільнішим від симетричного. Також потребує значно більше обчислювальної потужності як для шифрування, так і для розшифрування інформації.
Через вади в швидкодії асиметричного методу цей метод доводиться використовувати разом з симетричним (асиметричні методи на 3 — 4 порядки повільніші). Так, для розв'язання задачі ефективного шифрування з передаванням секретного ключа, використаного відправником, інформація спочатку симетрично зашифровується випадковим ключем, потім цей ключ зашифровують відкритим асиметричним ключем одержувача, після чого повідомлення і ключ відправляються по мережі.


5. Знайомство із HTTPS
Що означає HTTPS?
http://не-дійсний-домен/pictures_06/https.png
На сьогоднішній день (2016 рік) досить поширеним є HTTP-протокол обміну даними між браузером юзера та сервером. Недоліком такого протоколу є те, що дані передаються відкрито та ніяк не захищені від зловмисників.
Та в деяких системах, наприклад, платіжні системи, дані передаються за протоколом HTTPS.
Всі сучасні браузери автоматично підтримують HTTPS-протокол.
HTTPS означає HyperText Transfer Protocol Secure. Тобто маємо протокол HTTP+S.
HTTP. HTTP є мережевим протоколом, який виконує передачу даних між клієнтами (браузером) і сервером, яким зазвичай є комп'ютер хостингу веб-сайту.
Secure. Безпечні з'єднання представляють собою комбінацію з двох протоколів: HTTP та SSL/TLS. Останні є криптографічними протоколами, які шифрують з'єднання мережі, та унеможливлюють перегляд даних третьою стороною. Скорочення перекладаються як протоколи Secure Sockets Layer і Transport Layer Security. Окрім перегляду веб-сторінок, ці протоколи використовуються для шифрування передачі даних в повідомленнях електронної пошти, онлайн-факсів, миттєвих повідомлені і голосу поверх IP.
Взяті разом протоколи утворюють HTTPS, який означає, що зв'язок "звичайного тексту" веб-сайту зашифрований для підвищення безпеки.
Принцип роботи безпечного з'єднання
http://не-дійсний-домен/pictures_06/how_https.png
Як працює з'єднання HTTPS? Загальний принцип роботи протоколу SSL/TLS можна порівняти за рисунком 2.
Якщо нам необхідно передати цінну інформацію співрозмовнику, то необхідно:
1. Закриваємо ящик з цінною інформацією на замок (ключ залишається у Вас) та відправляємо співрозмовнику,
2. Співрозмовник отримує ящик, проте не має змоги його відкрити (відсутній ключ на Ваш замок), співрозмовник також додатково встановлює замок на ящик (ключ залишає собі) та повертає ящик,
3. Отримавши закритий ящик назад, Ви знімаєте власний замок -> відправляєте співрозмовнику,
4. Співрозмовник відкриває власний замок та дістає цінні дані.
Тобто для обміну інформацією Ваш комп'ютер та сервер встановлюють загальний секретний ключ, потім шифрують інформацію за допомогою цього ключа. Секретний ключ генерується для кожного сеансу зв'язку, його неможливо перехопити та неможливо підібрати - загалом його довжина більше 100 знаків. Майже ідеально, проте ще залишилось вирішити одне питання - знати, що Ваш співрозмовник саме той, за кого себе видає.

Цифровий сертифікат
http://не-дійсний-домен/pictures_06/https_certificate.png
Для чого потрібен цифровий сертифікат?
В питаннях доступу до секретної інформації зловмисники можуть підробити повідомлення таким чином, щоб кореспонденти навіть не здогадувались про присутність третьої сторони (MitM-атака, або атака «Людина посередині» англ. Man in the middle - MitM -attack).

Що таке MitM-атака?
http://не-дійсний-домен/pictures_06/maninthemiddle.jpg
HTTPS гарантує помірний захист від підслуховування та від нападу «людина посередині» (man-in-the-middle). Проте що таке «людина посередині»?
MitM-атака, або атака «Людина посередині» (Англ. Man in the middle- MitM-attack) - Термін криптографії, що позначає ситуацію, коли атакуючий здатний читати і видозмінювати по своїй волі повідомлення, якими обмінюються кореспонденти, причому жоден з останніх не може здогадатися про його присутність в каналі.
MitM-атакою називають метод компрометації каналу зв'язку, при якому зломщик, підключившись до каналу між контрагентами, здійснює активне втручання в протокол передачі, видаляючи, спотворюючи інформацію або нав'язуючи хибну.

Для того щоб засвідчити правдивість того, що Ви є саме той, за кого себе видаєте, створені Цифрові Сертифікати (SSL-сертифікат).
SSL сертифікат - це цифровий підпис домену, забезпечує безпечне з'єднання та передачу даних між сервером та клієнтом. Сертифікат встановлюється на сервер та гарантує, що обмін даними між сайтом та клієнтом відбувається по захищеній лінії зв'зку із застосуванням htpps-протоколу.
Сертифікати видає "паспортний стіл :) " - Центр Сертифікації, правдивість якого незаперечна, наприклад, ресурс - Ukrnames .
Любий сервер (сайт), який хоче встановити безпечне з'єднання з Вами, повинен мати сертифікат.
Сертифікат встановлює:
1) Що особа, якій він виданий існує.
2) Що особа володіє сервером(сайтом), що вказаний в сертифікаті.
Сертифікати видають Центри Сертифікації. Завдання Центру Сертифікації - підтверджувати справжність ключів шифрування за допомогою сертифікатів електронного підпису.
В сертифікаті зазначені дані, що засвідчують особу та підпис, що засвідчує правдивість даного сертифікату.
Перевірка достовірності сертифікату, це перше, що виконує браузер під час встановлення безпечного HTTPS-зв'язку.
Користувачу для HTTPS-з'єднання сертифікат не потрібен.


Висновок. Що ж я дізнався?
Коротко:
https-протокол безпечний протокол передачі секретних даних.
Передача даних шифрується відкритим ключем SSL-сертифікату, що має власник сайту.
Достовірність Сертифікату підтверджує Центр Сертифікації.
Сучасні браузери перед тим як відправляти дані автоматично перевіряють достовірність Сертифікату та встановлюють https-протокол з'єднання.

P.S. Між іншим. TCP портом за замовчуванням для HTTPS є 443 (для HTTP — 80).
P.S.S. Згідно заяви Google рейтинг сайтів із https-протоколом буде вищим.
http://не-дійсний-домен/pictures_06/google-ssl.jpg

Подякували: VTrim, Master_Sergius, 221VOLT, fed_lviv4

2

Re: Шифрування даних. Стаття

Анатолій написав:

Дякую, прийдеться зробити ще невеличкий допис в плані шифрування даних до попередніх розділів щодо crypt(), password_hash(), password_verify(), https... etc

І все ж таки я не дібрався до php-кодування, вірніше шифрування даних на сервері :)
Що ж потрібно буде зробити допис до допису :)

Щодо поданого вище матеріалу, можливо в кого будуть суттєві пропозиції зауваження, так як я то почитав інформацію, але на власному сайті безпечну передачу даних не встановлював, тому ж тут було б доречно розглянути додатково питання "Як встановити на власному сайті https-протокол зєднання?"

3 Востаннє редагувалося VTrim (12.02.2016 14:48:54)

Re: Шифрування даних. Стаття

+, мені було б лінь стільки писати :)
Але стаття до SEO не відноситься.

4

Re: Шифрування даних. Стаття

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

Подякували: 221VOLT1

5

Re: Шифрування даних. Стаття

VTrim написав:

+, мені було б лінь стільки писати :)
Але стаття до SEO не відноситься.

щодо лінь то скажу що українською мовою взагалі дуже мало матеріалів за тематикою https, теж відноситься і до Центру Сертифікації -  то загалом я один з піонерів по матеріалу, за що думаю Google сподіваюсь поставить +1 для мого сайту

по другому зауваженню,  в зв'язку з останніми перетусовками на форумі статті/підрозділи, то попросив би напевно пана Replace, чи хто там з адмінів може перетаскувати теми, перемістити дану статтю у відповідний розділ форуму

ktretyak написав:

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

дякую, Костя, між іншим, я ще раніше бачив що в тебе ресурс https://hub.org.ua/ з протоколом https,  тобі не складно було б в пять речень вложитись розповівши як перевести сайт з http на https, а то я був знайшов десь інфу але зараз не осилив що вони хотіли сказати.

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

6

Re: Шифрування даних. Стаття

копіпаст не дуже добре, але вже тут його багато з вікіпедії :)

Подякували: ktretyak, Анатолій, 221VOLT3

7 Востаннє редагувалося ktretyak (12.02.2016 18:27:24)

Re: Шифрування даних. Стаття

Анатолій, особливої складності немає, але треба мати хоча б невеликий досвід використання Linux + Git.

Є відкритий проект https://letsencrypt.org/ метою якого є - зробити інтернет безпечнішим за допомогою якраз роздачі безкоштовних сертифікатів для https.

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

До речі, здається я десь краєм вуха чув, що для користувачів cPanel є можливість отримати сертифікати від letsencrypt по спрощеній схемі. Погугли, щось має бути...

Подякували: leofun01, Анатолій, 221VOLT3

8 Востаннє редагувалося 221VOLT (23.02.2016 04:53:02)

Re: Шифрування даних. Стаття

Здається ви ще пропустили момент що сертифікати можуть бути різними по так званому "класу захисту" і чим вони відрізняються -- тобто є b, a, a+ і тд

---

Для розробки на локалці чи просто у локальній мережі можна використовувати самопідписаний сертифікат - найпростіше його згенерувати якось так --- https://www.digitalocean.com/community/ … untu-14-04

при заходженні на сайт з таким сертифікатом шифрування працюватиме, проте при першому вході на сайт потрібно буде позначити сайт як довірений/додати у виключення як надійний

куплений чи отриманий безплатно у якогось з центрів сертифікації підписаний сертифікат буде без цього "невеличкого недоліку"

---

про перехід з http на https можу розказати для nginx
1) перенаправляєте з http на https

"трошки конфігів nginx"
#site http www + without www -> https without www
server {
    listen 80 default_server;
    server_name www.site.zz site.zz;
    return 301 https://site.zz$request_uri;
}

#site https www -> https without www
server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
    server_name www.site.zz;
    #server_name "~^www\.(.*)$";
    #return 301 $scheme://$1$request_uri;
    return 301 https://site.zz$request_uri;
}

#site https without www - main server block
server {
    #listen 80 default_server;
    #listen [::]:80 default_server ipv6only=on;
    listen 443 ssl;
    
    root /var/www/site;
    index index.php index.html index.htm;

    server_name site.zz;
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    charset utf-8;
    underscores_in_headers on;
    
    access_log /var/www/access.log;
    error_log /var/www/error.log;
    
    gzip  on;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_min_length 1024;
    gzip_proxied any;
    gzip_types text/plain text/css image/svg+xml image/svg application/json application/javascript application/x-javascript text/*;
    gzip_buffers 16 8k;
    #gzip_disable "MSIE [1-6].(?!.*SV1)";
    #add_header X-Frame-Options "SAMEORIGIN";
    #add_header X-Content-Type-Options "nosniff";
    add_header X-Frame-Options "DENY";
    #add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    
    #if ($host ~ '^www\.(.*)$') {
    #set $rh $1;
    #rewrite (.*) $scheme://$rh$1 permanent;
    #}
    
    error_page 403 @php;
    error_page 404 /404.html;
    location = /404.html {
        root /var/www/site/stc/html;
        internal;
    }
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /var/www/site/stc/html;
        internal;
    }
    
    location ~* \.php$ { access_log off; error_log off; log_not_found off; return 404; }
    location ~* \.htaccess$ { access_log off; error_log off; log_not_found off; return 404; }
    location ~* \.htpasswd$ { access_log off; error_log off; log_not_found off; return 404; }
    location ~* \.sql$ { access_log off; error_log off; log_not_found off; return 404; }
    location ~* \.tmp$ { access_log off; error_log off; log_not_found off; return 404; }
    location ~* \.tpl$ { access_log off; error_log off; log_not_found off; return 404; }
    location ~* \.conf$ { access_log off; error_log off; log_not_found off; return 404; }
    
    location  /stc/ {
        access_log off; error_log off; log_not_found off; return 404;
    }
    
    #location ~ ^/(css|js|html|img|imgeng|file)/ {
    #    root /var/www/site/stc;
    #    try_files $uri $uri/ =404;
    #    access_log off;
    #    error_log off;
    #}
    location /css/ {
        root /var/www/site/stc;
        try_files $uri $uri/ =404;
        access_log off;
        error_log off;
    }
    location /js/ {
        root /var/www/site/stc;
        try_files $uri $uri/ =404;
        access_log off;
        error_log off;
    }
    location /html/ {
        root /var/www/site/stc;
        try_files $uri $uri/ =404;
        access_log off;
        error_log off;
    }
    location /img/ {
        root /var/www/site/stc;
        try_files $uri $uri/ =404;
        access_log off;
        error_log off;
    }
    location /imgeng/ {
        root /var/www/site/stc;
        try_files $uri $uri/ =404;
        access_log off;
        error_log off;
    }
    location /file/ {
        root /var/www/site/stc;
        try_files $uri $uri/ =404;
        access_log off;
        error_log off;
    }
    
    #location ~ \.(gif|jpg|png)$ {
    #    root /var/www/site/stc;
    #}
    
    location / {
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
        
        try_files $uri $uri/ @php;
    }
    location = /index.php {
        try_files @php @php;
    }
    
    location @php {
        proxy_set_header HOST $host;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host $http_host;
        proxy_pass http://127.0.0.1:8080;
    }
}

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

Подякували: Анатолій1

9

Re: Шифрування даних. Стаття

Replace написав:

копіпаст не дуже добре, але вже тут його багато з вікіпедії :)

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

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

Подякували: 221VOLT1

10 Востаннє редагувалося 221VOLT (24.02.2016 02:28:00)

Re: Шифрування даних. Стаття

Анатолій написав:
Replace написав:

копіпаст не дуже добре, але вже тут його багато з вікіпедії :)

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

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

супер!! а сайт лише українською мовою чи багатомовний?
я тут подумую зібратися з друзями і знайомими коли час буде та зробити блог-портал про програмування-залізо-навколо-компютерну тематику та хоббі,,
такий собі хабрахабр багатомовний + довідник -- зібрання максимально інфи по різних мовах програмування і переклад на багато мов + авторські статті групи програмістів,,
для обміну досвідом та спілкування

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

що скажете?

11

Re: Шифрування даних. Стаття

221VOLT написав:

супер!! а сайт лише українською мовою чи багатомовний?
я тут подумую зібратися з друзями і знайомими коли час буде та зробити блог-портал про програмування-залізо-навколо-компютерну тематику та хоббі,,
такий собі хабрахабр багатомовний + довідник -- зібрання максимально інфи по різних мовах програмування і переклад на багато мов + авторські статті групи програмістів,,
для обміну досвідом та спілкування

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

що скажете?

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

Пане 221VOLT, щодо спільного проекту, то чи вистачить наснаги все це вести? Воно й справді багато є ініціативних людей, що ведуть схожі тематики, от наприклад яких я зустрічав

hub.org.ua
http://codeguida.com/
programming.in.ua

знайомі друзі от розпочинають http://blog.indelio.com.ua/ (як завжди без дозволу власників презентував :) , між іншим в мене чомусь він глючить з чотирьох браузерів що відкривав то 2 браузера відкрили нормально IE та FireFox, а 2 браузера Crome, Opera без шрифтів, чому так? )
також натрапив на цікаву ідею http://www.balachka.com/
тай є з десяток інших розрізнених веб-проектів

та й я особисто лиш за розвиток україномовного it,
Тобто загалом вести ресурс для ініціативних людей в чому їх сенс, зиск, чому вони захочуть витрачати години, місяці свого часу, заради чого? Чистий ентузіазм?

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

Подякували: 221VOLT1

12 Востаннє редагувалося 221VOLT (24.02.2016 20:36:52)

Re: Шифрування даних. Стаття

Анатолій написав:
221VOLT написав:

супер!! а сайт лише українською мовою чи багатомовний?
я тут подумую зібратися з друзями і знайомими коли час буде та зробити блог-портал про програмування-залізо-навколо-компютерну тематику та хоббі,,
такий собі хабрахабр багатомовний + довідник -- зібрання максимально інфи по різних мовах програмування і переклад на багато мов + авторські статті групи програмістів,,
для обміну досвідом та спілкування

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

що скажете?

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

Пане 221VOLT, щодо спільного проекту, то чи вистачить наснаги все це вести? Воно й справді багато є ініціативних людей, що ведуть схожі тематики, от наприклад яких я зустрічав

hub.org.ua
http://codeguida.com/
programming.in.ua

знайомі друзі от розпочинають http://blog.indelio.com.ua/ (як завжди без дозволу власників презентував :) , між іншим в мене чомусь він глючить з чотирьох браузерів що відкривав то 2 браузера відкрили нормально IE та FireFox, а 2 браузера Crome, Opera без шрифтів, чому так? )
також натрапив на цікаву ідею http://www.balachka.com/
тай є з десяток інших розрізнених веб-проектів

та й я особисто лиш за розвиток україномовного it,
Тобто загалом вести ресурс для ініціативних людей в чому їх сенс, зиск, чому вони захочуть витрачати години, місяці свого часу, заради чого? Чистий ентузіазм?

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

одній людині - звичайно ні, пальців не вистачить =))
хіба що над програмною частиною працювати - і то декілька людей потрібно (щоб все грамотно зробити, як зараз над іншим проектом працюємо, щоб не тяп-ляп на вордпрессі, якого телющить-плющить при напливі користувачів)

але одна людина може розпочати лавину маленькою сніжкою,
так і тут з головою потрібно буде підійти --- не валити все на одні плечі - від дурної голови ноги болять --- а розпочати такий проект уже спільно невеличким колом програмістів і перекладачів --- а далі буде лише зростання

бонуси для програмістів-авторів статті(ей) -
0 - зібрання всієї корисної для самого програміста інформації разом на одному сайті
1 - у випадку не анонімних публікацій а з контактами -- можливі нові знайомства-спілкування, пропозиції роботи
2 - крім того получиться представлення себе і свого коду більшій кількості людей ніж на маленькому персональному блозі --- за рахунок того що персональний блог замкнутий на локалі (наприклад ви знаєте лише українську, чи російську -- ваш блог ведеться лише українською чи російською) --- а на багатомовному блозі ви можете написати статтю лише на українській чи російській мові і забути навіть про неї, а далі ця стаття буде перекладена на англійську-іспанську-німець-інші мови багатомовного блогу --- отже стане доступна для набагато більшої кількості людей
3 - оскільки це буде не просто недосайт на водпрессі а повноцінний сайт поверх повноцінного апі не тільки зі статтями а й з зібранням туторіалів і прикладів по різних мовах програмування - можливо також створити далеко не один корисний додаток для мобільних платформ і різних операційних систем

бонуси для програмістів-перекладачів/просто перекладачів
0 - досвід
1 - --||--
2 - з ростом ресурсу можливе збільше способів монетизації -- відповідно якщо починання будуть на ентузіазмі --то далі після покриття прибутку від монетизації розходів оренди сервера(ів) -- робота перекладачів стане оплачуваною, в тому числі й всі попередні переклади,,
робота авторів статей --- авторських статей -- тут ще треба подумати - вони й так на себе працюють,,
ті ж хто з самого початку збирав-структуризував бібліотеку прикладів-туторіалів з доступних у інтернеті у вільному доступі -- точно за цю роботу заслуговують оплати, адже наведення порядку у цьому океані інтернет-хаосу --- достойна праця

якось так, можливі уточнення та доповнення, придумання нових фішечок та сервісів

звісно до цього всього ще треба дожити -- взагалі до початку роботи над цим цікавим проектом ще кілька місяців чи навіть пів-року, хоча команда вимальовується-збирається зараз, при роботі над іншим проектом :)

------

мене тут недавно критикував один програміст з досвідом - говорив мовляв я не зможу працювати, і не зможу зробити проект над яким працюю через те, що я "зелений і досвіду мені бракує"))

у відповідь я можу сказати лише те, що ---
програміст який не радиться з іншими програмістами тому що боїться признатися що він чогось не знає,
не консультується у інших програмістів бо боїться що потім не зможе кричати що то він лише сам-один розробляв проект,
-
може написати лише страшний говнокод на застарілих конструкціях та технологіях, попутньо набивши собі на голові сотні шишок в одиночку :))

чому те що я "зелений" -- може мені заважати запитати поради (і отримати її) у інших програмістів з більшим досвідом?

і такий умник-критикан-програміст точно не може мене критикувати через свою в більшій чи меншій мірі некомпетентність =)

imho  програміст який багато спілкується з іншими програмістами і не боїться визнати що він чогось не знає --- дуже швидко вивчить нове та набагато меньше набє собі шишок на голові -- взаємодопомога рулить !  :)

13

Re: Шифрування даних. Стаття

Стосовно теми шифрування, то тут ще питання для чого його краще використовувати.

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

Якщо ж вам треба зберігати, наприклад, власні паролі, то тоді справді - краще шифрувати.

Отже, якщо ви хочете зберігати зашифрований пароль в MySQL чи MariaDB, то тип даних потрібно вибирати BLOB (допустимі й деякі інші типи, але я точно знаю за BLOB).

Щоб зашифрувати та розшифровувати дані, можна використовувати функції AES_ENCRYPT() та AES_DECRYPT() так:

-- зашифровуємо
select AES_ENCRYPT('тут ваш пароль', 'ключ для шифрування') as pswd

-- розшифровуємо
select AES_DECRYPT('0x98A946703F6FD869579672F88BF60018', 'ключ для шифрування') as pswd
Подякували: Анатолій, 221VOLT, leofun013