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

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


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

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

    В результате, скрепя сердце, я решил выложить всё начистоту и рассказать всему миру о том, как я в последние несколько лет воровал имена пользователей, пароли и номера кредитных карт с самых разных сайтов. Возможно, вы — администратор или разработчик одного из них.
    Читать дальше →
  • Как работает yield

    • Translation
    На 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/

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

      image

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

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

      Читать дальше →
    • Создание API: в рамку и на стену

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

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

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

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

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

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

      Оформляй требования как шаблоны использования API. Сверяйся с ними в процессе проектирования.
      Читать дальше →
    • Как работает программа «Поиск IT-уязвимостей» у ПриватБанка


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

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

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

      Решив что я не нарушаю никаких правил Приватбанка, пошел проверять старую уязвимость, и (почему то я и не сомневался) ее никто не исправил.
      Читать дальше →
    • Nginx на стероидах — расширяем функционал с помощью LUA

        Для обеспечения работы всех наших внешних продуктов мы используем популярный nginx. Это быстро и это надежно. Проблем с ним почти нет. Наши продукты также постоянно развиваются, появляются новые сервисы, добавляется новый функционал, расширяется старый. Аудитория и нагрузка только растет. Сейчас мы хотим рассказать о том, как мы ускорили разработку, неплохо увеличили производительность и упростили добавление в наши сервисы этого нового функционала, при этом сохранив доступность и отказоустойчивость затронутых приложений. Речь пойдет о концепции “nginx as web application”.
        А именно, о сторонних модулях (в основном LUA), позволяющих делать совершенно магические вещи быстро и надежно.
        image
        Читать дальше →
      • DevConf::Python() 14 июня в Москве — приезжает автор книги «Porting to Python 3»

          Не пропустите «питонячью» секцию 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 и другие прогрессивные технологии.
          Читать дальше →
          • +12
          • 3.6k
          • 8