Monthly Archive for February, 2006

Фактическая ошибка

Смотрю закрытие Олимпиады. Русские выходили и размахивали белыми Чебурашками. Чебурашки никогда не бывают белыми. Это тропический зверь и он никогда не линяет на зиму и не меняет окрас. Ведь не зря же его нашли в ющике с апельсинами. И не зря он подружился с крокодилом.
И если уж на то пошло - он всего один. Чебуршка - уникальный зверь.

XMLHttpRequest, PHP и ограничение доступа к данным

Иногда требуется зщищать данные, передаваемые через XMLHttpRequest, чтобы они были доступными только для авторизированных клиентов. Можно это реализовать передачей логина и пароля в параметрах скрипта. Но это не очень хорошо, так, как, например, XMLHttpRequest может попытаться загрузить с сервера данные из статического файла, например, изображение или видео. Можно, конечно эти данные отдавать через скрипт, но в таком случае прийдется самостоятельно реализовывать такие фишкики, как поддержка докачек и много прочего. Есть более постое решение. Многие веб-разработчики знают о такой штуке, как Basic HTTP Authentication. В чем же ее преимущества и как нам ими воспользоваться? Во-первых, этот механизм стандартизирован и давно уже отлажен, поддерживается и серверами, и броузерами. Во-вторых, этот тип аутентификации может быть применен как для доступа к статическим файлам и папкам, так и к скриптам. В-третьих, этот тип аутентификации можно реализовывать в php-скриптах, благодаря чему можно хранить учетные записи в БД. В-четвертых, и самое главное, сам XMLHttpRequest поддерживает этот метод аутентификации. Итак, начнем. И начнем мы с сервера. Сразу скажу: PHP должен быть модклем Apache, иначе этот метод работать не будет - cgi-версия PHP просто не предоставляет таких возможностей. Будем делать скрипт, который выдает время на сервере (очень ценную информацию ;) ) пользователям, которые есть в БД. Здесь будут олько кусочки из готового работающего скрипта. Работать в таком виде это не будет, но идею, думаю, поможет понять. Итак, первым делом нам надо заставить пользователя авторизироваться. Для этого мы сообщаем броузеру, что без логина и пароля сюда войти нельзя. if (!isset($_SERVER['PHP_AUTH_USER'])) { header(’HTTP/1.0 401 Unauthorized’); header(’WWW-Authenticate: Basic realm=”Some Secret Area (51)”‘); echo (’This is protected area.You have to be authorized.’); exit(); } Если скрипту не передали логин, то надо сказать броузеру, чтобы он их передал. Делается это передачей специального заголовка. Далее проверяем правильный ли нам логин передали. В ниже следующем примере мы проверяем наличие записи для переданного логина в БД. Ну, и если нет такой записи, то, конечно же, не пускаем. $user_object = new user(&$db); $user = $user_object->getByEmail($_SERVER['PHP_AUTH_USER']); if (!isset($user) && !isset($user['id'])) { header(”HTTP/1.1 401 Unauthorized”); echo “No such user”; exit(); } Дальше проверяем пароль. Поскольку сам алгоритм Basic HTTP Authentication не предполагает никакого шифрования, а передают пароли в base64, мы себя немножко убезопасим, организовав доступ по временым ключам, состоящих из самого пароля и времени. if (sha1($user['password'] . round((time() + 50) / 100)) != $_SERVER['PHP_AUTH_PW']) { header(”HTTP/1.1 401 Unauthorized”); echo “Authorization failed. Play more.”; exit(); } Ну, и если пройдены все эти проверки, то уже можно выдавать данные. Теперь переходим к клиентской части - XMLHttpReques. Здесь все совсем, как обычно, за исключением одной мелочи. Наверное, многие, кто интересовался, обратили внимание на то, что метод open объекта XMLHttpRequest принимает аж пять параметров.
void open( AUTF8String method , AUTF8String url , boolean async , AString user , AString password )
Последние три необязательные. Давайте рассмотрим их все.
  • method: метод запроса. Например, ‘GET’ или ‘POST’
  • url: адрес, куда посылается запрос
  • async: указывает должен ли запрос быть асинхронным
  • user: логин для аутентификации на сервере
  • password: пароль для аутентификации на червере
Вот как-раз два последних параметра нас и интересуют. Делаем асинхронный запрос мтодом GET по адресу в переменной URL. И передаем логин и наш хитрый пароль. this.request.open('GET', URL, true, login, sha1(password + Marh.round((Date.getTime + 50) /100))); А в остальном, все так же, как и обычно. Вот и все. Достаточно небольшие изменения в скриптах могут помочь спрятать информацию от глаз тех, кому ее видеть не обязательно. :)

Жызнь налаживается

«Жизнь налаживатся» ­- очень неоднозначная фраза.
Я бы даже сказал, что она может отражать два крайних состояни - хорошее и плохое. Все зависит от происхождения слова «налаживаться». ;)

Снежинка

Она родилась высоко в небе, в темной туче. Он кружиласть на ветру с тысячами других снежинок. И однажды она увидела Его. Увиедла и полюбила. Она сразу же устремилась к нему на встречу. Она спускалась как можно быстрее, а ветры ее то и дело подбрасывали вверх, подхватывали и носили из стороны в сторону, кружили. А она все летела к Нету и умолала ветры, чтобы они ее принесли к Нему.
Она нежно села ему нащеку и прижалась как могла плотно. Она обняла Его всеми своими лучиками. Она впитывала Его тепло и таяла. И растаяв сбежала по щеке пресной слезой, оставиви по себе тонеькую дорожку талой воды.
А он всего лишь утер щеку и пошел дальше, как ни в чем не бывая…

vim tip: win2*nix

Заменить перевобы строк с ыиндовых на никсовые в vim’е очень просто:
:%s/\r//g

Ну, и для полного счастья ще несколько.

Название Туда (→) Обратно (←)
win2nix :%s/\r//g :%s/\n/\r\n/g
win2mac :%s/\n//g :%s/\r/\r\n/g
nix2mac :%s/\n/\r/g :%s/\r/\n/g

Еще можно почитать про Newline в Wikipedia.

Трудные слова

Вот заметил, что все время появляются новые слова с не очень ясным значением. Маркетинг, дигитайзин, франчазинг и много-много других. Все примерно догадываются о чем идет речь, но точно никто не знает и поэтому получается, что идет разговор “о том; ну, о том же!”.

Порой быват еще хуже. Люди говорят слова, а смысла не знают. Вернее они свой смысл вкладывают в чужие слова.

Машенька: мне ничего не остаётся как совершить инцест…
DMD: :-О ????
Машенька: тьфу..!суицид.

Машенька и DMD (bash.org.ru#10924)

Ищу

“Новый год плюс бесконечность”
Сергей Челяев
Москва: Форум, 2005. — 368 с. (Серия “Другая сторона”). 4000 экз.
ISBN:5-8199-0241-6

Сказка о несчастном звере

Посадили хомячка в клеточку,
В ней подушечка и опилочки,
Только нет у хомячка девочки,
Но есть кормушечка и поилочка.
Очень грустно хомячку жить без подружечкии,
Очень грустно хомячку да без милочки
И не радует его ни подушечка,
Ни кормушечка, ни поилочка.
Подарили хомячочку подружечку,
Очень беленькую и пушистенькую.
А подружечка изгрызла подушечку
И закакала поилочку чистенькую.
Стало жалко хомячку той подушечки,
А особенно-то жалко поилочки,
Темной ноченькой загрыз он подружечку,
Закопал пушистый трупик в опилочки.
А наутро загрустил-запечалился,
По своей пушистой беленькой деточке,
Он кормушечку сломал от отчаянья
И повесился на прутике клеточки.
Жаль его и жаль хомячку-блондиночку,
Вышла сказочка плохая-противная…
А хомяк - он тупая скотиночка,
Да к тому же еще агрессивная.

Автор неизвестен (мне)

Сказка о несчастном звере

Посадили хомячка в клеточку,
В ней подушечка и опилочки,
Только нет у хомячка девочки,
Но есть кормушечка и поилочка.
Очень грустно хомячку жить без подружечкии,
Очень грустно хомячку да без милочки
И не радует его ни подушечка,
Ни кормушечка, ни поилочка.
Подарили хомячочку подружечку,
Очень беленькую и пушистенькую.
А подружечка изгрызла подушечку
И закакала поилочку чистенькую.
Стало жалко хомячку той подушечки,
А особенно-то жалко поилочки,
Темной ноченькой загрыз он подружечку,
Закопал пушистый трупик в опилочки.
А наутро загрустил-запечалился,
По своей пушистой беленькой деточке,
Он кормушечку сломал от отчаянья
И повесился на прутике клеточки.
Жаль его и жаль хомячку-блондиночку,
Вышла сказочка плохая-противная…
А хомяк - он тупая скотиночка,
Да к тому же еще агрессивная.

Мобильный телефон

Звонишь - трубку не берет. И потом не перезванивает… Зачем человеку мобильный тебелефон?