что такое безопасный код

Несколько мыслей по поводу безопасного кода

Не пользователь вызывает ваш метод, а другие методы. Пользователь – это живой человек, который жмет кнопки, он ничего не знает про ваши методы. Настоящее заблуждение – сопоставлять вызов метода с пользователем.

Очень часто программисты проникаются мыслями о пользователе, когда они работают в визуальных средах. Такие среды как Delphi или Visual Studio позволяют легко определить обработку событий элементов управления, с которыми работает пользователь. Легко поддаться соблазну и дважды нажав в редакторе формы на кнопке задать действие, которое определило бы обработку действия пользователя. Формально – это правильно. Но рассмотрим пример:

Данный пример работает только до той поры, пока мы уверенны, что событиями управляет мифический пользователь. Но мы остаемся беспомощными перед реальным положением дел, когда кодом управляет не пользователь, а другой код.

Контекста нет, есть только требования безопасности

Имея дело с веб-приложениями, забудьте о том, что какие-то функции могут быть вызваны или элементы управления нажаты только когда что-то где-то произошло. Что пользователь произвел логин, что сегодня понедельник, что кнопку нажал Боря, а не Петя. Все это иллюзии, к которым приводят мысли о том, что вы имеете дело с пользователем, а не с кодом.

К примеру, есть у нас страница, на которой после логина появляется панель управления некоторым функционалом. Самой большой ошибкой может стать ваше убеждение в том, что данная панель управления не может быть использована неавторизованным пользователем. Это настолько простое заблуждение, что многие даже не задумываются над ним.

На моем проекте есть такие страницы с панелью, на страницах запрещено кэширование, а в случае исключительной ситуации она регистрируется в БД. И даже с учетом того, что страница вроде бы не может быть помещена в кэш, я фиксирую попытки использования якобы недоступной панели неавторизованными пользователями.

И тут есть этому очень простое объяснение: пользователь Боря может просто не закрывать страницу пару суток, а потом обратиться к ней снова, когда его сессия на сервере уже давно будет завершена. А, может быть, вместо него это сделает Петя и тут последствия уже могут быть разными: от простого окна с ошибкой и неприятного осадка и до похищения или компрометации данных Бори злодеем Петей.

Что это значит? Все просто: забудьте про контекст, следуйте правилам безопасности.

Код всегда вызывается «злым» кодом

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

Итак переделаем предыдущий пример так, как он того заслуживает:

Исключительные ситуации заслуживают исключительных мер

Стоит запомнить раз и навсегда:
1. возврат методом кодов ошибок, вместо вызова исключения – это зло;
2. исключение не синоним ошибки.
Тут стоит сразу же определиться, что на самом деле считать кодом ошибки. Если код возвращает описание ситуации, то это – описание ситуации, но если код возвращает значение в случае возникновения ситуации, когда он не смог продолжить работу – то это и есть код ошибки, вызов которого должен быть заменен на вызов исключения.

Например:
• код проверяет наличие необходимого файла и возвращает булево значение, где false – это признак того, что файла нет;
• код читает содержимое файла, но в некоторый момент не может прочитать блок и завершается, возвращая булево значение либо значение какого-то перечисления;
• код проверяет наличие файла изображения и если не находит его, то завершает выполнение без возврата какого-либо значения или вызова исключения.
В первом случае возврат булева значения – это задача метода, во втором – возврат описания исключительной ситуации. Первый метод изменять не нужно, второй необходимо переделать на вызов исключения, отказавшись от возврата какого-либо значения. Третий же случай – это распространенный случай, когда ошибочная ситуация незначительна в общем контексте выполняемой работы. Генерирование исключительной ситуации в этом месте остановило бы выполнение важного кода из-за пустякового момента, что недопустимо.

Определение степени исключительности ошибки – это не всегда простая задача. Я рекомендую следующие правила:
• возврат кода ошибки допустим только в методах, которые тестируют ситуацию на ошибку;
• если код не может быть выполнен до конца в связи с ошибкой, то необходимо генерировать исключение;
• если код в рамках контекста решаемой задачи столкнулся с заранее известной возможной проблемой, то имеет смысл, либо завершить код с возвратом описания ситуации, либо проигнорировать проблему.

Все ответы – отрицательные

enum Access
<
Granted,
Restricted
>
private Access CheckLogin( string password)
<
Access result = Access.Granted;

Код очевидно дурацкий, но это упрощение, а в жизни можно увидеть и более сложные конструкции, суть которых сводится к этому коду. Что здесь плохого? Да просто тот факт, что если в методе GetValidPassword возникнет какое-либо исключение, то любой пользователь с любым паролем получит доступ.

Для возврата результата я определил несколько правил:
• в незначительных методах, которые не будут вызывать исключения при проблемах, избегайте возвращать не nullable типы, кроме булевых значений;
• все методы, возвращающие значения, первым делом должны инициализировать это значение самым отрицательным или безопасным вариантом (для nullable типов – это может быть null, для булевых – false, для перечислений – самое негативное значение вроде Access.Restricted);
• все методы должны иметь одну точку для возврата значений.
В результате можно выделить такой паттерн:

private Access MyMethod()
<
Access result = Access.Restricted;

// помещайте свой код здесь, в коде не должно быть вызовов return, только изменение значения result

Источник

Безопасный код: Работа с пользовательским вводом

что такое безопасный код
(ч2. Подделка межсайтовых запросов; ч2. Работа с базой данных)

Наверняка, XSS атаки остаются самыми популярными наравне с SQL инъекциями. Их принцип прост до безобразия, а последствия разнятся от невинного коверканья вывода страниц до получения злоумышленником полного контроля над сайтом.

Некоторые сценарии XSS атак

Устойчивая атака

Неустойчивая атака

Как обезопасить код от XSS?

Ответ прост — фильтровать вывод на страницу.

Методы фильтрации в Друпале

Золотое правило работы с данными — хранить пользовательский ввод в базе именно в том виде, в котором он был отправлен. Поэтому, всю фильтрацию следует производить на этапе вывода пользовательских данных на страницу.

Весь пользовательский ввод можно разделить на два типа:

    Текст без разметки (plain text)

    Любой пользовательский ввод, который должен быть подан в виде чистого текста, должен проходить через функцию check_plain(), которая превратит кавычки, амперсанды и угловые скобки в их HTML представление. Затем, такой текст может быть уже вставлен в конечную HTML разметку страницы.

    $form[‘good’] = array(
    ‘#type’ => ‘checkboxes’,
    ‘#options’ => array(check_plain($u_supplied0), check_plain($u_supplied1)),
    );

    Текст с разметкой

    Размеченный текст нужно фильтровать с помощью check_markup(). Эта функция принимает на вход, кроме самого текста, формат ввода, который содержит правила фильтрации. Поэтому, при формировании форм для текста с разметкой, имеет смысл вводить рядом с многострочными полями виджет для выбора формата ввода(filter_form()).

    -=Бонус=-

    Видео-доклад «Introduction Security» с прошедшего друпалкона:

    Источник

    ​Код безопасности на карте Мастеркард и Mastercard Securecode

    Для недопущения кражи денег со счета банковской карты MasterCard, равно как и остальные системы, оснащает свои карты особыми цифровыми комбинациями. Код безопасности на карте MasterCard разработан, чтобы подтвердить ее подлинность. Он именуется CVC2 (для Мастеркард) или CVV2 (для Виза) и включает три цифры, находящиеся на изнанке карты. Mastercard Securecode — это уникальный защитный код, который используется в современных картах, работающих в системе mastercard.

    что такое безопасный код

    Для чего предназначен код безопасности на карте MasterCard?

    Те, кто хоть раз делала покупку в Интернете, вводили этот код собственноручно. Обычно система требует указать имя собственника, номер платежной карты, срок окончания, защитный код. Подобное средство защиты всегда использует Сбербанк и другие банки России.

    Проверка подлинности платежной карты – основное назначение кода. Он расположен на магнитной стороне или в чипе. Информация о CVC2 нигде не показана, его нельзя поменять как ПИН-код.

    Такую информацию может предоставить только держатель карты. В случае кражи код становится известен, поэтому мошенник сможет воспользоваться вашими деньгами.

    что такое безопасный код

    Платежные системы предлагают свое название секретного кода:

    Почему в CVV2 и CVC2 используется именно цифра 2? Имеются аналогичные коды, только с цифрой 1. Они используются во время непосредственной оплаты картой. Банком-эмитентом коды CVC и CVV считываются в магнитной полосе карт.

    Карты расчетов American Express – нечастое явление для России. Существует еще китайская система платежей UnionPay.

    Все ли карты имеют защитные коды?

    Не все карты оснащены кодами безопасности. Так, расчетные карты первого уровня выпускаются без этих трех цифр на обороте. Это следующие виды карт: MasterCard Cirrus Maestro или Electronic, а также VISA Electron. Они не дают права рассчитываться в Интернете, а лишь позволяют снимать наличные или оплачивать услуги и товары в реальных магазинах.

    Где находится код безопасности на карте MasterCard?

    Найти CVC2 несложно. Он расположен на обороте на светлой бумажной ленте, где стоит ваша подпись, справа от нее.

    что такое безопасный код

    Существуют еще и виртуальные карты, которые эксплуатируются одноразово при проведении платежа и не имеют физического аналога. Получить код безопасности через Интернет можно после получения SMS-сообщения или на экране монитора при оформлении карты.

    что такое безопасный код

    Как обезопаситься владельцам платежных карт?

    Чтобы злоумышленники не смогли воспользоваться вашей картой, необходимо придерживаться определенных правил.

    Важно! Никто, кроме собственника карты, не должен владеть информацией о ней. Номер, остаток, срок действия и остальные данные держатся в секрете.

    что такое безопасный код

    Правила безопасности для осуществления платежей по карте

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

    При работе с банкоматом следует быть бдительным. В такие моменты рядом может находиться мошенник. Поэтому важно удостовериться, что никто не видит вводимую вами информацию.

    Во время оплаты услуг и товаров на сайтах интернет-магазинов код потребуется в самый последний момент для подтверждения платежа. Если сайт сомнительный, лучше отказаться от покупки.

    Дополнительную защиту для вашего платежного средства от несанкционированного использования третьими лицами обеспечивает Mastercard Securecode. Данный код известен может быть только самому держателю карты, разглашать его третьим лицам запрещено. Используется же такой индивидуальный номер для каждой карты при оплате покупок в онлайн-магазинах, работающих с безопасными соединениями и поддерживающих такую систему оплаты, которая может провести транзакцию именно при наличии mastercard securecode.

    что такое безопасный код

    что такое безопасный код

    Преимущества verified mastercard securecode

    Процедура verified visa mastercard securecode позволяет делать покупки в различных магазинах любой точки земного шара наиболее удобно и безопасно. К преимуществам использования именно такого кода в работе с карточкой стоит отнести:

    Для того чтобы вы и сами смогли разобраться с технологией использования mastercard securecode в режиме онлайн, давайте разберемся, как этот код подключать, куда нужно вводить такой пароль, и каков порядок работы с такими карточками в различных онлайн торговых точках.

    что такое безопасный код

    Как подключить такой код

    Чтобы mastercard securecode получить, вам необходимо обратиться напрямую в банк, выпустивший вашу карточку, оставить там запрос на такой код. Уже через несколько минут ваш запрос будет обработан, о чем сам банк уведомит вас соответствующим сообщением. Обратите внимание: такой код высылается при каждом запросе заново и после этого меняется. Передан же он может быть только тем, чья карта подключена к общей системе securecode. Уточнить информацию о том, есть ли такая опция у вашей карты, вы можете, обратившись непосредственно к банковским сотрудникам.

    Как использовать mastercard securecode

    Пройти процедуру verified mastercard securecode вы сможете на любом сайте, осуществляющем продажи в режиме онлайн, быстро, а главное, просто. Для этого вам нужно будет:

    что такое безопасный код

    Именно таким образом mastercard securecode пароль вы сможете использовать абсолютно на любом ресурсе, поддерживающем систему оплаты с помощью таких кодов для держателей МастерКард. Сама система обслуживания подобных карточек в данном случае несет полную ответственность за безопасность таких транзакций. А значит, вы сможете совершенно не переживать за то, что продавец, оформивший с вами сделку, каким-либо образом сможет выяснить код по вашей карточке и в дальнейшем использовать его без вашего ведома. Этого никогда не произойдет, если только вы не сообщите кому-либо подобный код напрямую непосредственно во время заключения сделки.

    Источник

    Рекомендации по безопасному написанию кода

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

    Защита доступа к ресурсам

    При разработке и написания кода необходимо защитить и ограничить доступ данного кода к ресурсам, особенно при использовании или вызове кода неизвестного происхождения. Убедиться, что ваш код является безопасным, можно с помощью следующих методов.

    Не используйте управление доступом для кода (CAS).

    Не используйте частично доверенный код.

    Не используйте модель DCOM.

    Не используйте двоичные модули форматирования.

    Безопасность доступа к коду и код Security-Transparent не поддерживаются в качестве границы безопасности с частично доверенным кодом. Мы не рекомендуем загружать и выполнять код из неизвестных источников, не предприняв дополнительные меры безопасности. Ниже приведены дополнительные меры безопасности.

    Пользователи операционной системы (ОС) и разрешения

    Код, нейтральный к безопасности

    Библиотека нейтрального кода имеет особенности, которые следует понимать. Предположим, что библиотека предоставляет элементы API, которые используют файлы или вызывают неуправляемый код. Если код не имеет соответствующего разрешения, он не будет выполняться, как описано. Однако даже если код имеет разрешения, вызывающий его код приложения должен иметь те же разрешения, чтобы он мог работать. Если вызывающий код не имеет нужного разрешения, в SecurityException результате анализа стека управления доступом для кода отображается.

    Код приложения, который не является повторно используемым компонентом

    Если код является частью приложения, которое не будет вызываться другим кодом, обеспечение безопасности является простым, а специальное кодирование может не требоваться. Однако помните, что вредоносный код может вызвать ваш код. Хотя управление доступом для кода может предотвратить доступ вредоносного кода к ресурсам, такой код все еще может считывать значения полей или свойств, которые могут содержать конфиденциальные сведения.

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

    Реализация управляемой оболочки в машинный код

    Обычно в этом сценарии некоторые полезные функции реализуются в машинном коде, который требуется сделать доступным для управляемого кода. Управляемые оболочки легко создаются с помощью вызова неуправляемого кода или COM-взаимодействия. Однако если это сделать, для успешного выполнения вызывающим ваши оболочки объектам необходимо предоставить права на неуправляемый код. В разделе Политика по умолчанию это означает, что код, скачанный из интрасети или Интернета, не будет работать с оболочками.

    Вместо предоставления прав на неуправляемый код для всех приложений, использующих эти оболочки, лучше предоставить эти права только коду оболочки. Если эта базовая функциональность не предоставляет никакие ресурсы и реализация также безопасна, оболочке достаточно просто объявить свои права, что позволяет любому коду вызывать ее. При использовании ресурсов написание безопасного кода должно быть таким же, как в случае кода библиотеки, описанного в следующем разделе. Поскольку оболочка потенциально предоставляет вызывающим объектам доступ к этим ресурсам, необходима тщательная проверка безопасности машинного кода, за которую отвечает оболочка.

    Код библиотеки, предоставляющий защищенные ресурсы

    Источник

    Как писать безопасный Python-код. Отвечает Кушал Дас

    В этом году компания спикеров Moscow Python Conf++ подобралась что надо (то есть как, подобралась — Программный комитет подобрал). Но кому интересно изучать достижения, куда интереснее, что спикер думает по поводу волнующих нас самих вопросов. Чтобы это узнать, получить инсайдерскую информацию или совет более опытного разработчика, и нужно общаться на конференциях. Но я воспользовался положением и взял небольшое интервью у нашего докладчика Кашала Даса (Kushal Das).

    Отличительная черта выступлений Кушала в том, что он регулярно обнародует «секретные» способы сломать Python-код и в противовес показывает, как написать код так, чтобы АНБ не смогло его взломать. На нашей конференции Кушал расскажет, как безопасно разрабатывать и деплоить Python-код, поэтому о безопасности я его и расспрашивал.

    что такое безопасный код

    — Кушал, расскажите, пожалуйста, немного о себе и о своей работе с Python и тому подобными вещами.

    Кушал Дас: Я живу в Индии, сейчас работаю технологом по общественным интересам в американской некоммерческой организации Freedom of the Press Foundation, где помогаю поддерживать проект SecureDrop. SecureDrop — это информационная платформа с открытым исходным кодом. Основной язык здесь Python.

    Помимо этого, я занимаюсь другими open source проектами, в том числе самим языком Python. Я один из Core-разработчиков CPython, а также член Совета директоров Python Software Foundation.

    Я работаю с Python с 2005 года, и почти вся моя карьера связана с этим языком, а также с Linux. Это два основных направления мои интересов. Еще я вхожу в группу Core-разработчиков проекта Tor Project. Как многие уже знают, Tor помогает сохранять конфиденциальность в интернете.

    — Tor — потрясающий проект, им пользуются разработчики по всему миру, чтобы получить доступ к API и документации, заблокированным, к примеру, из-за местных законов. Ваше выступление будет построено вокруг безопасности, поэтому у меня есть несколько вопросов.

    Прежде всего, есть мнение, что для обычного разработчика без специальной подготовки безопасность сама по себе слишком сложна. Считается, что мы, как отрасль, должны обеспечить инструменты и экосистему, чтобы создаваемое нами ПО было безопасным по умолчанию.

    Как вы думаете, что все-таки лучше: обучать людей безопасности или предоставлять им какие-то инструменты?

    Кушал Дас: Думаю, и то, и другое. Действительно, безопасность — сложный вопрос. Однако, если начинающий программист проходит базовые тренинги или работает в команде, то учится избегать большинство распространенных проблем.

    Чаще всего реальные ошибки в системе безопасности, такие как взлом, утечка или кража данных, возникают из-за неправильной конфигурации, отсутствия обновлений или некорректного, порой хулиганского кода.

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

    Очень простой пример — проверки зависимостей, которые теперь есть в GitHub. Если Python-приложение содержит ошибки или использует какую-то старую версию независимого модуля, и есть определенная уязвимость, описанная в CVE, GitHub может сказать вам как разработчику: «Эй! Здесь требуется обновление!» — и бот автоматически попытается сделать PR, чтобы обновить модуль.

    Таким образом, обучение и инструменты лучше сочетать, но лично я все равно предпочел бы как можно больше обучения. Именно люди вводят данные и допускают ошибки. Технологии все такие ошибки исправить не смогут.

    — Да, к сожалению, это так. Современная разработка программного обеспечения в значительной степени полагается на открытые репозитории, такие как Python Package Index, node.js, npm и т.п. При современном уровне развития это обычно происходит как pip install или poetry add.

    С вашей точки зрения, насколько высоки риски безопасности для обычного Python backend-разработчика в компании среднего размера, если он пользуется только этими инструментами? Приемлемы ли такие риски, или разработчикам надо учитывать даже тривиальные уязвимости?

    Кушал Дас: Это по настоящему важный вопрос, потому что во всех репозиториях, которые мы поддерживаем, где можно скачать модули для разных языков, мы стараемся сделать этот процесс простым и доступным для разработчиков.

    Для Python, например, существует Python security mailing list, который оповещает о проблемах с новейшими загруженными модулями для Python. Известны случаи так называемого тайпсквоттинга, когда название пакета похоже на очень известный пакет, и разработчики используют неправильный по неосторожности. Со стороны Python о подобных вещах заботится PyPI.

    Кроме того, при установке любого пакета с помощью pip, можно действительно проверить его и убедиться, что это то что нужно, а также проверить безопасность загрузки. Например, есть PEP 458, который советует защищать загрузки с PyPI подписыванием пакетов.

    Работы по развитию инструментов безопасности все еще продолжаются. Я бы рекомендовал разработчикам, начинающим работу с любым новым неподписанным модулем, выяснять, кто автор, сколько людей участвует в разработке, где хостится, в каких крупных проектах используется, что в исходном коде, есть ли жалобы на проблемы или ошибки и т. д.

    Это всего 15-30 минут поиска, но они дают массу преимуществ. Если ни один человек в мире, кроме автора, не использует этот пакет, возможно, и вам не стоит его использовать. Если этот конкретный модуль применяется в других пакетах или ПО, то он, скорее всего, будет более безопасным для вашего кода.

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

    Если говорить о публичных пакетах, зависимостях и репозиториях, недавно я обнаружил встроенный мониторинг безопасности в экосистеме node.js и npm, с проверкой данных при npm install something.

    NPM проверяет безопасность данных и показывает результаты. Например, выводит сообщение: «Среди пакетов, которые вы только что установили, есть два с высоким риском безопасности и десять со средним риском. Вы можете выполнить следующие команды, чтобы исправить или обновить их, или отказаться от установки». Это похоже на встроенные инструменты. Что вы думаете о таких решениях, и можно ли ожидать чего-то подобного для PyPI?

    Кушал Дас: Я никогда не пользовался NPM, за исключением, может быть, одного или двух раз в жизни, когда нужно было протестировать что-то. Поэтому не могу напрямую прокомментировать, насколько это хорошо, но, похоже, речь идет о том, чтобы дать разработчику более наглядный пользовательский интерфейс.

    В целом, все это часть истории про взаимодействие с пользователем, когда задача разработчиков и дизайнеров — выявить, как лучше всего представить данные с учетом того, что их реально просматривает конечный разработчик, третье лицо, которое будет устанавливать все эти инструменты и модули. Потому что, когда информации слишком много, мы обычно ее прощелкиваем или пропускаем, не читая. Истина где-то посередине.

    Насчет будущих планов Python- и pip-разработки — я не могу их комментировать, они мне неизвестны. Однако я думаю, или скорее надеюсь, что кто-то уже подал запрос на подобную функцию, чтобы авторы pip могли учесть его в своих планах. Сейчас команда поддержки немного больше, чем было раньше, — около семи человек с правом принимать коммиты.

    — Спасибо, я надеюсь, что со временем люди будут больше думать о безопасности и встраивать больше проверок в нашу экосистему. Давайте немного поговорим о вашем предстоящем выступлении на Moscow Python Conf++. Оно построено вокруг встроенной проверки безопасности зависимостей и пакетирования.

    Мы не будем здесь спойлерить, но с точки зрения эксперта по безопасности, с вашей точки зрения, что еще разработчики должны учитывать при проверке безопасности приложения?

    Мы уже обсудили, как обезопасить работу с зависимостями и пакеты. Что еще нужно проверять обычному разработчику? На что следует обращать внимание?

    Кушал Дас: Думаю, одним из главных пунктов должны быть обновления. Убедитесь, что хотя бы с этим у вас порядок, и все, от чего вы зависите, обновляется, включая ОС, будь то Linux, Mac, Windows или даже iOS. Как вариант, убедитесь, что вы, по крайней мере, смоделировали процессы, чтобы понять, что еще может пойти не так.

    Проблема новичков (и со мной такое случалось) в большинстве случаев заключается в том, что мы слепо доверяем пользовательскому вводу. Нужно меньше полагаться на то, что ввод действительно корректен, и что это не вызовет никаких других проблем. Всё нужно перепроверять.

    Кроме того, если что-то открыл — убедись, что не забыл закрыть. Представьте себе обычную дверь: когда мы входим в офис, мы проверяем, не забыли ли закрыть за собой дверь. Так же и в программировании, когда мы открываем файлы, сокеты или еще что-то, или доступ к чему-то, необходимо убедиться после завершения работы, что все чисто и закрыто.

    С точки зрения программирования, я думаю, это два основных момента, о которых многие забывают.

    — Да, есть много вещей, о которых люди забывают, и теперь, я думаю, последний вопрос. Исходя из вашего личного опыта, какие ошибки, связанные с безопасностью, чаще всего допускают Python backend-разработчики среднего уровня подготовки? Пользовательский ввод? Зависимости? Безопасное пакетирование приложения? Что встречается чаще?

    Кушал Дас: Проблемы, которые я видел, были в основном связаны с неправильным вводом.

    В 2011 году я разрабатывал инструмент для проекта Fedora и забыл вычистить свои временные файлы. В данном конкретном случае это были дампы, и их отсутствие в новой среде вызвало непредвиденные проблемы для инфраструктуры, — она упала из-за моего, мягко выражаясь, нехорошего кода.

    Это продолжение все той же темы, когда необходимо убедиться, что код «вычищен», если вы что-то создаете или открываете. Так что это был серьезный урок для меня. Когда ты думаешь: «Ага, я сделал это! Все работает на моем ноутбуке!», то не факт, что это будет работать в реальном релизе или продакшне.

    Мы почему-то часто думаем, что среда будет идентична нашей локальной, но она таковой никогда не бывает. Даже крупным компаниям часто трудно определить реальную среду на стороне клиента. Важно просто помнить об этом.

    И еще — делайте больше комментариев к своему коду, пишите документацию. Это совет не только для новичков, но и для опытных разработчиков. Если вы не заглядывали в код в течение нескольких месяцев или нескольких лет, потом бывает очень трудно понять, почему вы что-то когда-то написали.

    Кушал Дас выступит на Moscow Python Conf++. Большую оффлайн-конференцию мы были вынуждены перенести на осень, но 27 марта провели мини-онлайн-конференцию, материалами которой скоро поделимся, оставайтесь на связи.

    Источник

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *