Как стать автором
Обновить
48
0
Владимир Керимов @Qualab

Пользователь

Отправить сообщение

Рассказ о том, как я ворую номера кредиток и пароли у посетителей ваших сайтов

Время на прочтение 11 мин
Количество просмотров 166K
Продолжение: Рассказ о том, как не дать мне украсть номера кредиток и пароли у посетителей ваших сайтов
Представляем вам перевод статьи человека, который несколько лет воровал имена пользователей, пароли и номера кредитных карт с различных сайтов.


То, о чём я хочу рассказать, было на самом деле. Или, может быть, моя история лишь основана на реальных событиях. А возможно всё это — выдумка.

Выдалась однажды такая неделя — безумное время, когда всех вокруг тревожила безопасность. Ощущение было такое, что новые уязвимости появляются ежедневно. Мне было не так уж и просто делать вид, будто я понимаю, что происходит, когда меня об этом спрашивали близкие люди. Их беспокоила перспектива того, что их взломают, что их данные утекут неизвестно куда. Всё это заставило меня на многое взглянуть по-новому.

В результате, скрепя сердце, я решил выложить всё начистоту и рассказать всему миру о том, как я в последние несколько лет воровал имена пользователей, пароли и номера кредитных карт с самых разных сайтов. Возможно, вы — администратор или разработчик одного из них.
Читать дальше →
Всего голосов 319: ↑312 и ↓7 +305
Комментарии 325

Как работает yield

Время на прочтение 6 мин
Количество просмотров 658K
На StackOverflow часто задают вопросы, подробно освещённые в документации. Ценность их в том, что на некоторые из них кто-нибудь даёт ответ, обладающий гораздо большей степенью ясности и наглядности, чем может себе позволить документация. Этот — один из них.

Вот исходный вопрос:
Как используется ключевое слово yield в Python? Что оно делает?

Например, я пытаюсь понять этот код (**):
def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild

Вызывается он так:
result, candidates = list(), [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
        candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
        return result


Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

Подробный и обстоятельный ответ
Всего голосов 141: ↑136 и ↓5 +131
Комментарии 41

Пять заблуждений об открытом ПО

Время на прочтение 5 мин
Количество просмотров 59K
image

Программное обеспечение с открытым кодом имеет своих почитателей, а в последнее время если речь заходит о разработке каких-то «национальных» продуктов, так в основном open-source и подразумевают. Парадоксально, но интерес к этому виду программного обеспечения породил массу искажений и заблуждений, которые на практике мешают его распространению.

Наша компания участвует в открытых проектах с 2005 года – и благодаря разработке собственных open source решений (проекты OpenVZ, CRIU), участвуя в других открытых проектах (QEMU, OpenStack, libvirt, libcontainer, и т.д.). За 10 лет мы собрали несколько наиболее распространённых мифов об открытом программном обеспечении. Я расскажу про каждое из заблуждений и объясню, почему оно ошибочно. Наверняка, вы вспомните еще столько же, но, на мой взгляд, эти пять самые «адовые».

Читать дальше →
Всего голосов 53: ↑47 и ↓6 +41
Комментарии 77

Создание API: в рамку и на стену

Время на прочтение 5 мин
Количество просмотров 57K
Каждый программист — проектировщик API. Хорошие программы состоят из модулей, а протокол взаимодействия модулей — это тоже API. Хорошие модули используются повторно.

API — это большая сила и большая ответственность. У хорошего API будут благодарные пользователи; поддержка плохого превратится в кошмар.

Публичный API — не воробей, опубликуешь — не уберешь. Есть только одна попытка сделать все правильно, поэтому постарайся.

API должно быть легко использовать, но сложно использовать неправильно. Сделать что-то простое с помощью такого API должно быть просто; сложное — возможно; сделать что-то неправильно должно быть невозможно, или, по крайней мере, трудно.

API должен описывать сам себя. Изучение кода на таком API не вызывает желания читать комментарии. Вообще, комментарии редко нужны.

Перед разработкой API собери требования с долей здорового скептицизма. Осознай общие задачи и реши их.

Оформляй требования как шаблоны использования API. Сверяйся с ними в процессе проектирования.
Читать дальше →
Всего голосов 154: ↑143 и ↓11 +132
Комментарии 97

Как работает программа «Поиск IT-уязвимостей» у ПриватБанка

Время на прочтение 5 мин
Количество просмотров 70K

Крупнейший банк Украины Приватбанк объявил о том что “ПриватБанк заплатит 10000 грн. за найденные уязвимости в Приват24”. И информация на сайте банка.

Узнав об этом я вспомнил XSS уязвимость, которую обнаружил и написал о ней в приватный чат оператору Приват24 пол года назад. Погуглив об этой замечательной новости увидел статью на хабре “ПриватБанк обвинил украинского программиста во взломе своего Android-приложения”.

Интересно и страшно в одно и то же время. Ищите нам уязвимости а мы вас будем обвинять во взломе!

Решив что я не нарушаю никаких правил Приватбанка, пошел проверять старую уязвимость, и (почему то я и не сомневался) ее никто не исправил.
Читать дальше →
Всего голосов 118: ↑110 и ↓8 +102
Комментарии 69

Nginx на стероидах — расширяем функционал с помощью LUA

Время на прочтение 9 мин
Количество просмотров 54K
Для обеспечения работы всех наших внешних продуктов мы используем популярный nginx. Это быстро и это надежно. Проблем с ним почти нет. Наши продукты также постоянно развиваются, появляются новые сервисы, добавляется новый функционал, расширяется старый. Аудитория и нагрузка только растет. Сейчас мы хотим рассказать о том, как мы ускорили разработку, неплохо увеличили производительность и упростили добавление в наши сервисы этого нового функционала, при этом сохранив доступность и отказоустойчивость затронутых приложений. Речь пойдет о концепции “nginx as web application”.
А именно, о сторонних модулях (в основном LUA), позволяющих делать совершенно магические вещи быстро и надежно.
image
Читать дальше →
Всего голосов 72: ↑69 и ↓3 +66
Комментарии 40

DevConf::Python() 14 июня в Москве — приезжает автор книги «Porting to Python 3»

Время на прочтение 1 мин
Количество просмотров 3.8K
Не пропустите «питонячью» секцию Devconf 2013

imagePrehistoric Python: Patterns Past their Prime
Lennart Regebro — created his first website in 1994, and has been
working full time with open source web development since 2001. He is
the author of the book «Porting to Python 3».

Tulip — новый стандарт на асинхронный код
Андрей Светлов — использует Python с 2000 года.
Занимается разработкой языка и стандартной библиотеки как Python Core Developer.
Участвует в создании tulip.

UI нового поколения с Leap Motion и Python'ом
Павел Коломиец. Занимается разработкой веб-проектов с 2003-го года.
С 2010-го руководит разработкой игр в компании Insollo.
Любит Python3 (!), zeromq, redis и другие прогрессивные технологии.
Читать дальше →
Всего голосов 22: ↑17 и ↓5 +12
Комментарии 8

Информация

В рейтинге
Не участвует
Откуда
Ярославль, Ярославская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Game Developer
Lead