Давно хотілося написати якусь програму, використовуючи VK API. Вирішено було написати якийсь каркас, додаючи плагіни до якого можна було б реалізувати якісь дрібні завдання, які потрібні в даний момент: від завантаження музики до банальної підтримки облікового запису онлайн. Запускати цей витвір планувалося як на сервері, так і на ПК. З проблемами, які стали на моєму шляху під час розробки, включаючи озвучену в заголовку, я й хотів би познайомити вас.

Крок 0. Вивчення документації

Отже, завдання поставлене, тепер потрібно вивчити платформу VK API. Ознайомившись з методами, було помічено, що багато з них вимагають отримання access_token, або, простіше кажучи, авторизації користувача.
  1. OAuth-авторизація
  2. Пряма авторизація
  3. Авторизація з використанням офіційної програми (надається в SDK)
Тепер докладніше про методи в порядку зростання їхньої корисності:
Авторизація з використанням офіційного додатку
Програма зістиковується з офіційним додатком для Android або iOS, який дає йому інтерфейс для взаємодії з API.
Власне, без коментарів, спосіб для інших платформ і завдань.
OAuth-авторизація
Необхідно відкрити сторінку авторизації у браузері, де користувач, якщо він ще не авторизований на сайті, введе свій логін та пароль та дозволить доступ до його облікового запису.
Цей спосіб не сподобався відразу з двох причин: по-перше, токен таким чином необхідно отримувати кожні 24 години, по-друге, для його отримання потрібно щоразу заходити на сервер, відкривати lynx, авторизуватись і дозволяти доступ. Не дуже зручно. Є, звичайно, такий варіант, але все ж таки вирішено було пошукати щось інше.
Пряма авторизація
Передача логіну та пароля безпосередньо GET-запитом на певний URL. Токен у результаті виходить безстроковий і без прив'язки по IP.
Ідеально підходящий, здавалося б, спосіб, якби не одне «але»:
Увага! Доступ до цього типу авторизації може бути отриманий лише після попереднього узгодження з адміністрацією ВКонтакте.

Для подання заявки на отримання доступу Вам необхідно звернутися до служби підтримки за адресою vk.com/support, вказавши ID вашої програми.

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


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

Крок 1. Обхідні шляхи

Засмутившись тим фактом, що простим смертним отримати доступ до прямої авторизації досить складно, я вже мало не поховав свою ідею.
Однак, одного прекрасного дня, під час читання стрічки новин в офіційному додатку VK на планшеті під керуванням Windows 8, на думку спала думка: а чому б не взяти access_tokenз цієї програми, адже він безстроковий і без прив'язки до IP. Ну, чи ще крутіше, перехопити app_idі app_secretпід час авторизації офіційної програми. Все б нічого, якби не авторизація, звичайно ж, за https протоколом.
Зайнявшись ідеєю крадіжки app_idі app_secretспала на думку ще одна ідея - декомпілювати клієнт і спробувати пошукати там.
Сказано — зроблено: напевно, metro-додаток VK написано на C#, отже потрібно знайти C# декомпілятор. Першим у Google знайшовся JetBrains dotPeek. Добре спробуємо.
Далі непогано було б знайти саму програму VK. Після не дуже довгого пошуку було з'ясовано, що metro-програми в Windows 8.1 зберігаються в прихованій папці C: Program Files Windows Apps.
Чудово! Намагаємося зайти і бачимо:

Ми начебто з правами адміністратора натискаємо на «Продовжити»:

Весело, зайдемо на вкладку «Безпека», там нам запропонують задати особливі дозволи до «Додатково», зайдемо до «Додатково»:

Поміняємо власника на себе, клацнувши на «Змінити», ввівши в діалозі свій email облікового запису microsoft, або ім'я локального користувача та клацнувши на «Перевірити імена». Збережемо все це і тепер ми можемо зайти до папки з нашими metro-додатками. Шукаємо папку з VK, забираємо звідти VK.exe та згодовуємо його нашому декомпілятору. Структура програми видно для нас ідеально, всі назви функцій та класів збереглися, недовгим гулянням по класах знаходимо функцію Authorize, що містить рядок req, в якому є два чудові параметри:

Вуаль! client_idі client_secretнаші.

client_id та client_secret для копіювання

client_id=3697615
client_secret=AlVXZFMUqyrnABp8ncuU


Тепер ми можемо авторизуватись, використовуючи пряму авторизацію!
Скориставшись даними client_idі client_secretмені таки стало цікаво, що відповість підтримка на можливість їх використання. Після невеликої дискусії було отримано таку відповідь:

Цікава, звісно, ​​позиція. Добре, розслабляємось і користуємося.

Крок 2. Власне каркас

Бажаний каркас таки був написаний. Як мову програмування було обрано Python.
Складається він з ядра і плагінів, що підключаються. Ядро здійснює авторизацію, роботу з sqlite базою даних, імпорт плагінів, опитування longpoll-сервера.
Плагіни гнучко взаємодіють із ядром. Про структуру плагіна:
Щоб ядро ​​сприйняло файл як плагін, у ньому має бути оголошено змінну:

Vkbuddyplugin__ = True
Для того, щоб додати параметри до конфіг-файлу, плагіну необхідно оголосити змінну config_parameters:

Config_parameters = [("name": "parameter_name", # ім'я параметра "required": False, # bool, чи є параметр обов'язковим "description": "parameter_description", # опис параметра "default": "parameter_value", # значення параметра за промовчанням "typ": str), # тип параметра... ]
Щоб створити таблиці у БД (якщо вони ще не існують), необхідно оголосити змінну sql_tables:

Sql_tables = [("name": "table_name", # ім'я таблиці "structure":(# структура таблиці: пари (ім'я стовпця, тип стовпця) ("id", int), ("column_name", float))), ... ]
Також реалізовано набір стандартних хендлерів (додати нові хендлери можна і в плагінах, так уже реалізований хендлер текстових команд).

Стандартні хендлери:

  • before_auth_handlers- функції викликаються перед авторизацією, з єдиним параметром - основним об'єктом, в якому можна отримати доступ до VK API, хоч це й марно перед авторизацією
  • after_auth_handlers— функції викликаються після авторизації, з тим самим єдиним параметром
  • exit_handlersфункції викликаються перед виходом, так само з єдиним параметром
  • longpoll_handlers- функції викликаються при отриманні повідомлення від longpoll-сервера, параметрів тут багато, що вони означають можна подивитися в документації з VK API: (vkbuddy, code, msgid, flags, from_id, ts, subj, text, attachments)
На github можна ознайомитися з результатом, прикладами плагінів та іншим, а також взяти участь у розробці.

Дякую за увагу!

Posted October 23rd at 11:15pm.

Використання підтвердження імені користувача для підвищення рівня безпеки облікового запису

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

  • До уваги гравців у FIFA:Ця функція необхідна для доступу до серверів FIFA Ultimate Team та партнерських програм.

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


Увімкнення підтвердження імені користувача

1. Зайдіть на ea.com та виконайте вхід.

2. Натисніть на ім'я користувача, а потім виберіть пункт «Мій обліковий запис».

3. Виберіть вкладку «Безпека», де можна знайти розділ «Підтвердження імені користувача».

4. Натисніть «Увімкнути» для активації функції підтвердження імені користувача, введіть відповідь на контрольне запитання та виберіть один із варіантів: електронна пошта, програма для ідентифікації або SMS для отримання коду підтвердження.

  • Якщо ви оберете опцію «Електронна пошта», а не SMS, переконайтеся, що вказана для облікового запису адреса електронної пошти - це дійсна та працююча адреса, яку ви регулярно перевіряєте на наявність нових повідомлень.
  • Додаток для ідентифікації планшета та мобільного телефону дозволяє генерувати на цих пристроях коди підтвердження для входу в обліковий запис.
  • Виберіть тип пристрою зі списку та завантажте Google Authenticator для пристроїв на базі Apple та Android або Authenticator для пристроїв, які використовують операційну систему Windows.
  • Гравцям у FIFA 15 на PlayStation 3 та Xbox 360 не знадобиться вживати додаткових заходів безпеки під час підтвердження імені користувача з програмою для ідентифікації.

5. Тепер ви отримуватимете код підтвердження під час спроби входу з невідомого пристрою. Кожні 90 днів ви отримуватимете код підтвердження при вході до облікового запису з довірених пристроїв. Таким чином, тільки ви за допомогою унікального коду зможете отримати доступ до вашого облікового запису EA.


При необхідності підтвердження імені користувача можна вимкнути, поверніться на сторінку керування обліковим записом і виберіть «Вимкнути».*

Примітка

  • *Не відключайте підтвердження імені користувача, якщо ви граєте у FIFA Ultimate Team, інакше вам буде відмовлено у доступі.
  • Переконайтеся, що ви також створили та підтвердили секретне запитання та відповідь на нього для гри FIFA Ultimate Team.

Налаштуйте програму для ідентифікації

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

1. Відкрийте вкладку «Безпека» на сторінці «Мій обліковий запис» та знайдіть розділ «Підтвердження імені користувача».

2. Натисніть «Увімкнути», щоб увімкнути систему «Підтвердження імені користувача», дайте відповідь на контрольне запитання, виберіть «Додаток для ідентифікації» та натисніть «Продовжити».

3. Виберіть у випадаючому списку потрібну вам операційну систему телефону і проскануйте QR-код за допомогою програми для читання штрих-кодів або знайдіть у магазині програм для вашого телефону на запит authenticator відповідний додаток: Google Authenticator на Android та iOS або Authenticator на Windows Phone.

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

5. Проскануйте QR-код або введіть секретний код, щоб зв'язати програму для ідентифікації з обліковим записом EA.

6. Завершіть налаштування програми для ідентифікації, вказавши згенерований ним для облікового запису Electronic Arts код і натиснувши «Увімкнути підтвердження імені користувача».

Коли вам знадобиться підтвердити ім'я користувача у майбутньому:

1. Відкрийте програму для ідентифікації.

2. Введіть шестизначний код для облікового запису Electronic Arts.

Згенерований код дійсний протягом обмеженого часу. Якщо час дії поточного коду вже закінчується, зачекайте, поки програма згенерує новий код, щоб мати достатньо часу на його введення.

Що робити, якщо я не можу скористатися мобільним телефоном або електронною поштою, коли мені потрібен код? Чи можна створити допоміжні коди?

Якщо ваш телефон, ідентифікатор або електронна скринька не доступні для вас, єдиний спосіб увійти до облікового запису EA з невідомого комп'ютера - використання допоміжних кодів. Переконайтеся, що зберігайте їх у надійному та доступному для вас місці. Ви можете переглядати та оновлювати дані коди в обліковому записі EA у розділі «Налаштування конфіденційності» клієнта Origin або в режимі он-лайн.

  • Натисніть «Безпека», потім «Перегляд» та «Допоміжні коди».*
  • Ви також можете скористатися функцією «Запит нового коду після входу до FIFA Ultimate Team».

*Якщо у вас закінчилися допоміжні коди, ви можете згенерувати нові на сторінці «Керування обліковим записом».

Підтвердьте контактну інформацію, щоб переконатися у правильності коду.

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

  • Якщо під час активації підтвердження імені користувача ви вибрали опцію надсилання коду на пошту, то можете перевірити та оновити свою адресу електронної пошти у розділі «Про мене» на сторінці «Управління обліковим записом» або через клієнт Origin.
  • Якщо ви вибрали «Додаток для ідентифікації», ви можете скористатися штрих-кодом або QR-кодом для сканування та пошуку коду між?secret= і &.
  • Якщо під час активації підтвердження імені користувача ви вибрали опцію надсилання коду по SMS, то можете перевірити та оновити свій номер телефону в розділі «Безпека» на сторінці керування обліковим записом або через клієнт Origin.
  • Створити чи підтвердити секретне запитання та відповідь.

Як тільки ви підтвердите контактні дані, у вас з'явиться можливість увімкнути підтвердження імені користувача для отримання нового коду.

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

Контактна форма є стандартною веб-сторінкою, яка доступна на кожному сайті. Це дозволяє відвідувачам сайту зв'язатися з власниками сайтів або постачальниками послуг, які відповідають за підтримку цього веб-сайту. Так що ми думаємо, чому б не створити просту контактну форму за допомогою Angularjs та php, щоб отримувати повідомлення від веб-сайтів, читачів та/або користувачів.

Ми використовуємо Angularjs для переднього плану та php на стороні сервера. Ми будемо писати код на php, який приймає дані з Angular форми та відправляє електронною поштою адміністратору сайту. Створіть папку з ім'ям “contact-form” у вашому веб-каталозі додатків та створіть зразок оформлення сторінки HTML – index.html. Тепер скопіюйте та вставте код нижче у файл index.html.

Демо - Проста контактна форма за допомогою Angularjs та php

Контактна форма за допомогою angularjs та PHP


Php код для надсилання електронної пошти

Створіть сторінку contact.php і скопіюйте код, наведений нижче. Нижче наведено php-код, який витягуватиме дані з angular форми і надсилатиме електронною поштою, за вказаною адресою електронної пошти.

< ?php $post_data = file_get_contents("php://input"); $data = json_decode($post_data); //Just to display the form values echo "Name: " . $data->name; echo "Email:". $ data-> email; echo "Message:". $ data-> message; // sned an email $to = $data->email; $subject = "Тестовий лист сайт для тестування angularjs контактної форми"; $message = $data->message; $headers = "From: " . $data->name .. "\r\n" .. "\r\n" . "X-Mailer: PHP/" . phpversion(); //функція PHP mail для надсилання електронної пошти на адресу електронної пошти mail($to, $subject, $message, $headers); ?>

«Захистом від дурня» називається комплекс заходів щодо припинення введення неправильної інформації у формі. Наприклад, якщо в полі потрібно ввести позитивне число від 0 до 10, слід перевірити, щоб користувач не ввів текст або число, яке не лежить в зазначеному діапазоні, тобто. число має бути менше нуля і більше десяти.

Чому відбувається введення неправильної інформації? Це в основному відбувається з трьох причин.

  1. Користувач помилився випадково, наприклад, неуважно прочитав, що потрібно вказати.
  2. На веб-сторінці неоднозначно просять ввести дані, тому користувачеві доводиться ворожити та робити припущення, що ж насправді від нього хочуть. При цьому не завжди відбувається збіг думок розробника та користувача.
  3. Є низка людей, які сприймають інструкції як виклик та намагаються вчинити навпаки. Такі користувачі розмірковують приблизно так: «Ага, мене просять запровадити число. А що буде, якщо я вкажу літери?». Після чого задають явно неправильну інформацію та дивляться, до чого це призведе.

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

Обов'язкове поле

Деякі поля форми повинні бути обов'язково заповнені перед надсиланням на сервер. Це, наприклад, відноситься до форми реєстрації, де потрібно ввести логін та пароль. Для обов'язкових полів використовується атрибут required , як показано в прикладі 1.

Приклад 1. Атрибут required

HTML5 IE 10+ Cr Op Sa Fx

Обов'язкове поле

Логін:

Пароль:

Обов'язкові поля повинні бути заповнені перед відправкою форми, інакше форма на сервер не надішлеться і браузер видасть про це попередження. Вигляд повідомлення залежить від браузера, наприклад Chrome виводить підказку, як показано на рис. 1.

Рис. 1. Обов'язкове поле не заповнене

Коректність даних

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

  • Веб-адреса ( ) повинен містити протокол (http://, https://, ftp://).
  • Адреса електронної пошти ( ) повинен містити букви або цифри до символу @, після нього, потім точку та домен першого рівня.

У браузерів дещо різниться політика перевірки даних користувача. Наприклад, Opera підставляє протокол http:// перед введеним текстом автоматично, тоді як інші браузери чекають на нього від користувача. Chrome та Opera вимагають, щоб у поштовій адресі була точка, для Firefox вона не є обов'язковою.

У прикладі 2 показано форму з обов'язковими полями, в якій два поля перевіряється браузером.

Приклад 2. Коректність даних

HTML5 IE 10+ Cr Op Sa Fx

Коректність даних

Заповніть форму (усі поля є обов'язковими)

Ім'я:

Email:

Сайт:

Opera перевіряє елемент форми лише за наявності атрибута name.

Що відбувається в Opera під час введення невірних даних показано на рис. 2.

Рис. 2. Попередження про неправильні дані

Шаблон введення

Деякі дані не можна зарахувати до одного з видів елементів форми, тому їм доводиться використовувати текстове поле. При цьому їхнє введення відбувається за певним стандартом. Так, IP-адреса містить чотири числа розділених точкою (192.168.0.1), поштовий індекс Росії обмежений шістьма цифрами (124007), телефон містить код міста і конкретну кількість цифр, що часто поділяються дефісом (391 555-341-42) та ін. вказати шаблон введення, щоб він згідно з ним перевіряв дані, що вводяться користувачем. Для цього використовується атрибут pattern, а його значенням виступає регулярний вираз. Деякі типові значення перераховані у табл. 1.

У прикладі 3 просять ввести шістнадцяткове значення кольору (#ffcc00) і якщо воно не лежить у цьому діапазоні, браузер виводить повідомлення про помилку.

Приклад 3. Шаблон введення

HTML5 IE 10+ Cr Op Sa Fx

Введення кольору

Введіть шістнадцяткове значення кольору (починати з #)

На рис. 3 показано попередження у браузері Chrome.

Рис. 3. Введені дані не відповідають шаблону

Скасування валідації

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

. У прикладі 4 показано використання цього атрибуту.

Приклад 4. Скасування валідації

HTML5 IE 10+ Cr Op Sa Fx

Атрибут novalidate

Для аналогічної мети застосовується і атрибут formnovalidate , який додається до кнопки для відправки форми, в даному випадку до тегу . У цьому випадку форма з прикладу 4 матиме такий вигляд.

Логічний атрибут required HTML повідомляє браузеру про можливість надсилання даних форми тільки при заповненні обов'язкових полів. Це означає, що поле не можна залишити порожнім, і що залежно від інших атрибутів або типів полів можуть прийматися лише конкретні типи значень. Трохи пізніше ми поговоримо про те, як повідомляти браузерів про необхідність надсилання певних типів даних.

Якщо обов'язкові поля залишаються порожніми, форма не буде надіслана. Opera, Firefox, Internet Explorer 10+ та Chrome видають користувачеві повідомлення про помилку. Наприклад, « Заповніть це поле» або « Потрібно заповнити порожні поля».

У термінології Javascript подія focus запускає елемент форми, коли на неї перемикається фокус, коли фокус переходить на інший елемент, або вона втрачає фокус.

У CSS можна використовувати псевдоклас :focus для стилізації елементів, виділених на даний момент.

Атрибут required застосовується для будь-якого типу елемента введення, за винятком button , submit , image , color і hidden . Всі ці елементи мають значення за промовчанням, тому додатковий атрибут буде зайвим. Синтаксис цього атрибуту просто required або required="required" , якщо ви використовуєте XHTML-синтаксис .

Додамо атрибут HTML input required до форми реєстрації. Зробимо поля імені, адреси електронної пошти, пароля та дати передплати обов'язковими:

  • (щонайменше 6 символів, без пробілів)

На скріншотах, наведених нижче, можна бачити, що робить атрибут required HTML при спробі підтвердити форму:

Повідомлення про обов'язкові поля Firefox

Та ж ситуація в Opera.

та в Google Chrome

Стилізація обов'язкових полів у формі

Ви можете стилізувати обов'язкові поля форм за допомогою псевдокласу :required,:optional або негативного псевдокласу :not(:required)) . Також можна стилізувати валідні та не валідні поля за допомогою псевдокласів :valid та :invalid. За допомогою цих псевдокласів HTML input required можна показувати користувачам які поля обов'язкові до заповнення:

input ( background-position: 0% 50%; background-repeat: no-repeat; padding-left: 15px; ) input:required ( background-image: url("../images/required.png"); ) input :focus:invalid ( background-image: url("../images/invalid.png"); ) input:focus:valid ( background-image: url("../images/valid.png"); )

У цьому випадку ми додаємо фонове зображення (зірочку) до обов'язкових полів форми. В input-елементи не можна включати контент, що генерується. Тому краще використовувати фонове зображення. Крім цього валідні та не валідні поля можна виділити різними фоновими картинками. Зміни будуть помітні лише тоді, коли користувач виділив відповідний елемент форми.

Попередження: Firefox стилізує не валідні елементи

Врахуйте, що браузер Firefox застосовує до не валідних елементів власну стилізацію (червону тінь), як було показано на одній із картинок вище. Щоб вимкнути цей ефект для required HTML, скористайтеся наступним CSS-кодом:

:invalid ( box-shadow: none; )

Підказка: таргетована стилізація для застарілих браузерів

Застарілі браузери на кшталт IE8 і IE9 не підтримують псевдоклас :required , але можна надати стилі таргетовані за допомогою селектора атрибутів:

input:required, input ( background-image: url("../images/required.png"); )

Також можна використовувати цей атрибут як хук для валідації форми в браузерах, що не підтримують валідацію на основі HTML5. Javascript-код перевірить порожні елементи введення на наявність атрибуту required і не відправить форму при виявленні порожніх обов'язкових полів.