За життя

Как оказалось, сделать серверную часть HTTP транспорта можно на Java, .NET, Delphi - но не на PHP. Потому как самая популярная HTTP-серверная платформа не поддерживает (без костылей, которых по умолчанию не стоит) переменные за пределами сессии. Т.е. открыть соединение к базе в одном запросе, а попользоваться им в другом - низзя. Ура, товарищи.
Сьогодні дружина відкрила чарівну багу (точніше, швидше design flow) в веб-комерсі. Багато кошиків на сайтах зберігають інформацію про вибір в куках. Ну нормально, зручно для 1-2-5 товарів. Працює. А дружина взялася замовляти насіння. Воно дешеве, його треба багато (тобто 20-30 позицій мабуть). І кожна позиція писалась в куки. Доти, поки куки не перевищили певну довжину, яка сприймається сервером. І все! Наступний перехід по сайту привів до 400 Bad Request від сервера і поки куки не почистили (втративши все, що вона годину вибирала), на сайт навіть потрапити не можна було.

(написано для співробітників, публікується із незначними скороченнями)

Останні два тижні я вивчаю стан справ із розробкою для Web. Чим і хочу з вами поділитись.

15 років тому Delphi набула популярності в першу чергу завдяки концепції компонентів, тобто бібліотек коду, котрі легко вбудовувались в структуру і ієрархію класів самого засобу розробки. Загалом на ті часи на ринку був наявний обмежений перелік засобів розробки (під Windows як найбільш масову платформу), а саме Visual C++, Visual Basic, Delphi / C++Builder, пізніше Java і .NET. Все. Були ще рідкісні звірі на кшталт Access і PowerBuilder, але вони вміли використовувати COM / ActiveX. Таким чином, можна було достатньо легко "накрити" весь ринок засобів розробки.

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


Тільки в аспекті мов програмування ми маємо як вказані C++, Delphi, .NET і Java, так і такі динамічні мови як PHP, Perl, Python, JavaScript (node.js), Ruby, Scala, Groovy і пара ще більш екзотичних. Причому, наприклад Python'ів є два -- 2.5/2.7 і 3.х, котрі мають істотні розбіжності між собою і багато бібліотек не переписані ще під 3.x . PHP зараз вийшла версія 5.4, котра внесла чергові покращення і зміни (у нас на сервері використовується 5.2).

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

До цього додаються кілька типів СУБД, а саме як SQL-based MySQL (в якості найбільш популярної web-based СУБД), так і noSQL СУБД (CouchDB, MongoDB).

Оскільки клієнтською частиною є зазвичай браузер, то єдиною на сьогодні клієнтською платформою є JavaScript з усіма його недоліками (котрих чимало). Розумною альтернативою був Flash, але він на сьогодні припинив розвиватись і Adobe переключилась на HTML5 і Flash.

Конструктивно серверний код web програм може виконуватись в кількох середовищах:

1) shared хостинг. Годиться для невеликих сайтів, зазвичай надаються доступ до MySQL (кількість баз даних обмежується) і PHP чи Python чи Ruby.

2) dedicated або virtual хостінг. Вся система (фізична або віртуальна) віддається в розпорядження орендаря, котрий має адмініструвати її.

3) PaaS, Platform as a Service. Це дуже цікава річ, про неї нижче.

Що таке клауди? Їх можна поділити на клауди зі збереження даних і клаудні платформи для запуску віртуальних машин.

Клауди зі збереження даних зазвичай побудовані на базі noSQL систем і пропонують сховище для пар "ім'я-значення", де значення (BLOB) може бути довільного розміру і може мати певні додаткові атрибути. До таких клаудів відносяться відомі Amazon S3, Microsoft Azure (точніше, Azure включає в себе сервіс зі збереження BLOB'ів). Доступ до таких клаудів і операції з ними здійснюються через HTTP-подібні RESTful APIs (це GET або POST запит по HTTP).

Цікавою штукою є клаудні платформи для запуску віртуальних машин. До них відноситься Amazon EC2 і деякі менш відомі. Фактично, це той же Virtual Hosting, але з можливістю робити репліки віртуальних машин та/або змінювати параметри цих машин (кількість пам'яті, bandwidth тощо). Самі віртуальні машини створюються клієнтом і завантажуються "в клауд". Віртуальні машини підлягають адмініструванню клієнтом. Фізичне розташування машин не має істотного значення, також вони можуть бути переміщені при необхідності.

Повертаємось до PaaS. Це покращений варіант клаудних платформ для запуску VM. В PaaS постачальник сам створює і адмініструє VM. Клієнт завантажує фактично своє програмне рішення (а не VM), зроблене під платформу. Тобто клієнту надається SDK, а клієнт пише свою програму із використанням цього SDK (одну - якщо програм кілька, то це незалежні програми, які мають взаємодіяти через публічні API, оскільки вони можуть виконуватись на різних віртуальних машинах в різних кінцях світу).

На сьогодні дві основні PaaS - це Google AppEngine і Microsoft Azure. Вони мають багато схожого, але і багато відмінностей.

Google пропонує створювати програми на Java або Python (або Go, але це їхня приватна мова програмування, котра набула певної популярності в 2009-му році, але faded away з тих пір) і використовувати мішанину сервісів від гугля, таких як якесь noSQL сховище для даних або механізми content retrieval'а.

Microsoft підійшли до питання з академічною прискіпливістю і створили потужну інфраструктуру сервісів, доступних для програм, що виконуються на платформі. Також, SDK доступні для .NET, Java, node.js і PHP (є ще якийсь generic SDK, з яким я не розбирався). Фізично це працює наступним чином: програма (кожна окрема) виконується на власній віртуальній машині під управлінням Win2008 Server + IIS (в випадку, якщо програма вимагає веб-сервера), але для нас це питання не є важливим.

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

З технічної сторони немає сенсу глибоко вивчати будь-яку вищеперераховану технологію, хоча варто почитати базово про кожну з них, щоб розуміти, що ми маємо на ринку. Решта (framework'и тощо) вивчається за наявності конкретних задач.

Є лише дві речі в випадку саме веб-програмування, які треба вивчати і знати.

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

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


Местные дворяне: зачем вы это сделали?
Онегин: я либерал.
Местные дворяне: мы считаем вас опаснейшим мудаком.


«Dart предназначен для широкого числа сценариев разработки: от небольших проектов одного человека, до крупных масштабных проектов со множеством участников и компонентов. Мы считаем, что Dart отлично подойдет для создания крупных веб-приложений», - отметил Ларс Бак (Lars Bak), программный инженер Google и один из разработчиков данного языка.

Гугль медленно но верно превращается во второй Microsoft. Раньше в Microsoft изобретали велосипеды потому что предыдущую интерпретацию внутри самого же MS придумали "не они" (т.е. другая команда), теперь этим же занимается гугль. Смешали JavaScript с PHP потому что этих придумали "не они".
Пока в мире идут неспешные разговоры о Semantic Web, Web 3.0 и прочих ярлыках, будущее уже за углом (с дубиной для вебмастеров). Гугль, Yahoo и Bing сообразили на троих такую вещь как Schema.org. Это унифицированная иерархическая система тегов для содержимого веб-страниц.

В чем суть: имеется некоторое (достаточно большое) количество XML схем, описывающих различные виды объектов. В HTML страницах те или иные данные помечаются тегами со свойствами, определенными в соответствующей схеме. Пример с сайта schema.org в конце записи.

Это, собственно, и составляет ядро семантической сети. Больше схем, хороших и разных, и мы имеем Web 3.0.

А на днях Google сообщил, что кнопка +1 позволит добавлять в Google+ сразу блок со страницы вместе со своей рекомендацией. А для того, чтобы эта функция работала, нужно добавить на страницу ... сюрприз, сюрприз... схему.

Так что вебмастерам есть теперь кусок счастья - обновлять сайты и все страницы (особенно там, где контент прописан вручную).


Google.org (GOOG)

Contact Details:

Main address:
38 avenue de l'Opera
F-75002
Paris, France
,

Tel:( 33 1) 42 68 53 00 ,
Fax:( 33 1) 42 68 53 01 ,
E-mail: secretariat(at)google.org

Members:
- National Scientific Members in 100 countries and territories: Country1, Country2, ...
- Scientific Union Members, 30 organizations listed in this Yearbook:

Member1
,

Member2
,

History:

In an effort to accelerate the rendering of Web pages in users' computers, Google has developed a search feature that predictively preloads pages before users click on result links.

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

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

Вчора прийшло попередження, що один з ліцензіатів Comodo (InstantSSL) навидавав фішерам фальшивих сертифікатів для відомих сайтів (гугль,амазон, ebay, yahoo etc). Такі сертифікати потрібні для DNS poisoning'а і інших видів атак, пов'язаних із підміною сайтів. Ці сертифікати вже були відкликані через CRL (Certificate Revocation Lists), але додатково основні гравці (MIcrosoft, Google, Mozilla etc) випустили оновлення, щоб примусити свої продукти скачати свіжі CRL з сервера. Що потрібно зробити вам -- поставити доступні оновлення від основних виробників мережевого ПЗ. Microsoft вже роздає цей апдейт через Windows Update, решту софта треба перевіряти. Також не забувайти включати в мережевих програмах опції (де наявні) "перевіряти статус сертифікатів в онлайні" і "отримувати листи відкликання сертифікатів" (ці опції можуть називатись по-різному в різних програмах. Нагадаю, що від DNS Poisoning'а із використанням такого фальшивого сертифікату ви так просто не врятуєтесь, хіба що у вас локально записані справжні адреси цих сайтів (але це ідея погана і складна в реалізації для пересічного громадянина)
Chrome OS is for people who live on the web.
It runs web-based applications, not legacy PC software.

З приводу "it runs" і "legacy" - це вони, звичайно, забрехались, але для розуміння сутності пропозиції згодиться.
Я вже певний час використовую і досі радію з сервісу AddThis. Повна кастомізація кнопочок, безкоштовна статистика (із щотижневим повідомленням на e-mail) тощо. Єдина проблема - на HTTPS сторінках не відображається як слід (незважаючи на те що в їхньому FAQ написано, що повинно працювати).
Зашел только что на сайт softkey.ru и вижу возможность залогиниться с помощью LiveID, OpenID и GoogleID. Замечательно, я считаю: лучший способ бороться с чем-либо - это подержать идею и довести ее абсурда.
Прикрутил к сайту, использующему продукт Bitrix: Управление Сайтом, правильную работу через HTTPS.

Дано: сайт на Apache + nginx, SSL сертификат.

Требуется: сделать так, чтобы логин и доступ к некоторым секциям сайта происходили только по HTTPS.

Решение:

1. При использовании nginx, по крайней мере так, как нам его настроил хостер, HTTPS запросы обрабатывает сам nginx, который посылает запросы апачу по обычному соединению (чтобы не плодить ненужных сущностей). Поэтому у сервера не будет определена $_SERVER["HTTPS"]. Решением является прописать в nginx.conf, в секцию, посвященную SSL'у, строки "proxy_set_header X-HTTPS 'on'; " . Этот кастомный заголовок потом увидит скрипт, приведенный ниже.

Если у вас нету nginx'а, а SSL запросы обрабатывает апач, то вышеприведенное не нужно, а нижеследубщий скрипт нужно будет изменить.

2. В /bitrix/php_interface/init.php прописываем

AddEventHandler("main", "OnBeforeProlog", "OnBeforePrologHandler", 10, $_SERVER['DOCUMENT_ROOT'].'/my_scripts/check_ssl.php');

3. В check_ssl.php пишем (обязательно читайте комментарий ниже!!!)


function OnBeforePrologHandler(&$arFields)
{
if(defined("NEED_AUTH") && NEED_AUTH)
{
if ($_SERVER["HTTP_X_HTTPS"] != "on")
{
$link="https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
if ($_SERVER["QUERY_STRING"] != "")
$link = $link . "?" . $_SERVER["QUERY_STRING"];
LocalRedirect($link);
}
}
}
?>

Комментарий: переменная HTTP_X_HTTPS устанавливается как описано в шаге 1. Если у вас Апач честно ставит переменную $_SERVER["HTTPS"], то вы должны анализировать ее.

4. В нужных местах в коде страниц перед включением пролога пишете define("NEED_AUTH", true);

5. Следующий этап необходим, если у вас есть сторонние скрипты, которые проверяют HTTPS через $_SERVER["HTTPS"], а у вас nginx, как описано в шаге 1.
В httpd.conf или в аналогичный файл настроек apache'а пишем строку

php_value auto_prepend_file /path/to/prefix_file.php

А в prefix_file.php пишем

if ($_SERVER["HTP_X_HTTPS"] == "on")
$_SERVER["HTTPS"] = "on";
?>

Этот префиксный файл будет исполняться перед всеми PHP скриптами, и будет устанавливать $_SERVER["HTTPS"]


После данных изменений вход на страницы, в которых требуется авторизация, будет всегда производиться через HTTPS.

UPD: хостер написал еще такой вариант:

nginx передает заголовок X-HTTPS=on
В apache в нужном сайте (eldos.com) добавь

>--------------- код -------------------
SetEnvIf SSL SSL HTTPS=on
>---------------------------------------

Это скажет php, что делать с SSL


Не проверялось.
Тут. Є кілька досить жорстоких, але більшість смішні. Як воно працює, я розумію - банери показуються відповідно до ключових слів, а слова-виключення або не ставлять або не підтримує engine. В мене була такого типу фотка теж - на сайті Мембрана.ру стаття про те, як лікували мишей (тестували щось) із заголовком "мишам подовжили життя", а внизу реклама від Бігуна "позбавтесь мишей назавжди".
  • Архів

    «   Липень 2021   »
    Пн Вт Ср Чт Пт Сб Нд
          1 2 3 4
    5 6 7 8 9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30 31