Pull to refresh
27
0
Алексей @Helixa

ведущий инженер-электроник

Send message

Как взломать защиту проекта PLC Allen-Bradley

Reading time2 min
Views17K

Краткая предыстория


В течении некоторого времени использования одной из систем управления тех. процессом возникла необходимость редакции проекта PLC. Так как, система была установлена американской компанией, то проект был реализован на контроллере Allen Bradley, а именно 1756-L61. Совпадение? Не думаю.

Хотя любовь американцев к Allen Bradley — это скорее просто мое наблюдение. И ни в коем случае не реклама этого производителя контроллеров.

Ближе к делу. Секции проекта были защищены от редактирования, в связи с ”мудрой” политикой разработчика в стиле ”Ничего не трогайте, без нас! Это нарушит стандарты безопасности эксплуатации управляемого агрегата. И т.д.”

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

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

Но защита не позволяла даже создать новую переменную вместо константы. Поэтому желание взлома защиты захлестнуло полностью.
Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments12

Задача на сортировку

Reading time3 min
Views4.8K
Возможно, кому-то эта задача покажется пустяковой, но лично я потратил на неё несколько часов, израсходовав подсказки «мнение зала» и «звонок другу». Зачем я это решал? Ответ прост: мне действительно нужно было реализовать такой подход для моего небольшого сайтика Одио.ру. Если вкратце, то там публикуются записи с самых разных сайтов, стягиваемые по RSS. Сложность в том, что даты в этих записях могут полностью совпадать (даже в рамках одной ленты), при этом последовательность ID имеет смысл только в рамках одной ленты, но никак не влияет на весь поток записей. Итак, давайте перейдем к условиям задачи.

Читать дальше →
Total votes 12: ↑6 and ↓60
Comments25

Защита от SQL-инъекций в PHP и MySQL

Reading time26 min
Views252K
К своему удивлению, я не нашёл на Хабре исчерпывающей статьи на тему защиты от инъекций. Поэтому решил написать свою.

Несколько пространный дисклеймер, не имеющий прямого отношения к вопросу
Давайте признаем факт: количество статей (и комментариев) на тему защиты от SQL-инъекций, появившихся на Хабре в последнее время, говорит нам о том, что поляна далеко не так хорошо истоптана, как полагают некоторые. Причём повторение одних и тех же ошибок наводит на мысль, что некоторые заблуждения слишком устойчивы, и требуется не просто перечисление стандартных техник, а подробное объяснение — как они работают и в каких случаях должны применяться (а в каких — нет).

Статья получилась довольно длинной — в ней собраны результаты исследований за несколько лет — но самую важную информацию я постараюсь компактно изложить в самом начале, а более подробные рассуждения и иллюстрации, а так же различные курьёзы и любопытные факты привести в конце. Также я постараюсь окончательно развеять множественные заблуждения и суеверия, связанные с темой защиты от инъекций.

Я не буду пытаться изображать полиглота и писать рекомендации для всех БД и языков разом. Достаточное количество опыта у меня есть только в веб-разработке, на связке PHP/MySQL. Поэтому все практические примеры и рекомендации будут даваться для этих технологий. Тем не менее, изложенные ниже теоретические принципы применимы, разумеется, для любых других языков и СУБД.

Сразу отвечу на стандартное замечание про ORM, Active record и прочие query builders: во-первых, все эти прекрасные инструменты рождаются не по мановению волшебной палочки из пены морской, а пишутся программистами, используя всё тот же грешный SQL. Во-вторых, будем реалистами: перечисленные технологии — хорошо, но на практике сырой SQL постоянно встречается нам в работе — будь то legacy code или развесистый JOIN, который транслировать в ORM — себе дороже. Так что не будем прятать голову в песок и делать вид, что проблемы нет.

Хоть я и постарался подробно осветить все нюансы, но, вполне возможно, некоторые из моих выводов могут показаться неочевидными. Я вполне допускаю, что мой контекст и контексты читателей могут различаться. И вещи, которые кажутся мне сами собой разумеющимися, не являются таковыми для некоторых читателей. В этом случае буду рад вопросам и уточнениям, которые помогут мне исправить статью, сделав её более понятной и информативной.

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

Правила, соблюдение которых гарантирует нас от инъекций


  1. данные подставляем в запрос только через плейсхолдеры
  2. идентификаторы и ключевые слова подставляем только из белого списка, прописанного в нашем коде.

Всего два пункта.
Разумеется, практическая реализация этих правил нуждается в более подробном освещении.
Но у этого списка есть большое достоинство — он точный и исчерпывающий. В отличие от укоренившихся в массовом сознании правил «прогонять пользовательский ввод через mysql_real_escape_string» или «всегда использовать подготовленные выражения», мой набор правил не является катастрофическим заблуждением (как первое) или неполным (как второе).

Но вперёд, читатель — перейдём уже к подробному разбору.
Читать дальше →
Total votes 128: ↑98 and ↓30+68
Comments97

Асинхронное параллельное исполнение в PHP

Reading time14 min
Views61K
Много пик сломано в мире на тему того, можно ли и как создавать многопоточность в PHP. Чаще всего все сводится к тому, что так делать нельзя или дискуссия материализуется в какие-то ужасные костыли (ох, сколько я их уже повидал). Я хочу изложить свою точку зрения на этот вопрос. Легко догадаться, что если бы моя позиция была “так нельзя” или “это зло”, то я бы не писал эту статью. Вот только погодите, не спешите доставать тухлые яйца и вооружаться мелкими бытовыми предметами для рукопашной схватки. Я постараюсь дипломатично изложить тему и максимально объективно раскрыть ситуацию. Так что самые смелые из моих читателей могут прочитать молитву от ереси и открыть статью.


Читать дальше →
Total votes 25: ↑13 and ↓12+1
Comments23

Как написать простой блог с помощью Asp .Net MVC, Nhibernate и Ninject.Часть 1

Reading time13 min
Views26K
Перевод
  1. Введение


    Существуют различные способы изучения технологий: чтение книг, участие в конференциях, создание примеров и другие. Я считаю одним из лучших способов — создать что-то полезное для себя с использованием изучаемой технологии. Блог одна из полезных вещей, которую вы можете легко сделать. В серии статей, мы изучим ASP.NET MVC, шаг за шагом, путем создания блога с нуля.
Читать дальше →
Total votes 21: ↑11 and ↓10+1
Comments10

Улучшаем свой английский: изобретаем субтитры заново

Reading time5 min
Views50K

1. Intro




— Татьяна Леонидовна, а можно, мы посмотрим это кино с субтитрами?
— Нет, малолетние дятлы, мы тренируем ваше слуховое восприятие, поэтому кино вы будете смотреть без них! С субтитрами вы будете только читать текст и не слушать.
— Татьяна Леонидовна, но без субтитров мы больше половины не понимаем!
— А вот это уже ваши проблемы.

Начало 2000-х, диалог с учителем во французской спецшколе, Санкт-Петербург.

Далее
Total votes 60: ↑58 and ↓2+56
Comments119

Полмегаватта чистой энергии в частные руки — отечественная новинка автономной энергетики

Reading time5 min
Views23K
В прошлом году я описывал свой путь в преобразовании дарового солнечного света в электрическую энергию. Перепробовав немало оборудования для автономной энергетики, я остановился на продукции российской компании «МикроАРТ». А в этом году отечественные разработчики порадовали выходом совершенно нового устройства, которое является сердцем любой автономной энергосистемы — инвертора МАП DOMINATOR. Заявлена масса новых функций: наращивание мощности путем добавления инверторов, организация трехфазной сети, встроенный микрокомпьютер. В конце концов, было обещано, что система позволяет генерировать более полумегаватта энергии, а это уже заявка!
Пользуясь акцией на сайте, которая повествует о возможности апгрейда инвертора с небольшой доплатой, я решил этой возможностью воспользоваться и сам оценить заявленные характеристики.

image

Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments108

STM32: SPI: LCD — Вы всё делаете не так [восклицательный знак]

Reading time8 min
Views84K
Надеюсь сообщество простит меня за такой заголовок, просто в последнее время все чаще и чаще сталкиваюсь с программами в которых к микроконтроллерам STM32 подключают различные дисплеи с интерфейсом SPI и очень часто передачу данных при этом делают не правильно.
Как следствие — либо код не работает совсем и тогда в него внедряют различные задержки, или пишут код таким образом что он гарантированно будет работать медленно (по сравнению с возможной скоростью). А кто то, не разобравшись просто копирует чужой «с костылями» код, и потом такие «произведения» ходят по интернету из примера в пример…
Блок SPI описанный в данной статье точно есть у контроллеров семейств: STM32F1, STM32F2, STM32F4. По другим смотрите Reference Manual.

Откуда растут такие проблемы и каким образом они решаются под катом.
Читать дальше →
Total votes 50: ↑45 and ↓5+40
Comments44

DevTips: Советы веб-разработчику (33-48)

Reading time5 min
Views31K
И вновь в эфире цикл переводов полезных советов для веб-разработчика. На этот раз автор расширил спектр исследуемых инструментов, добавив туда редактор Sublime Text и фреймворк Node.js. Предыдущие части: 1-16, 17-32.

Поехали!

Содержание:
   33.  Разворачивание упрощенной записи CSS-свойств
   34.  Определение совпадения селекторов по цвету
   35.  Использование визуальной навигации и просмотр снятых скриншотов процесса загрузки страницы
   36.  Sublime Text: нечеткий поиск при помощи функциональности GOTO
   37.  Быстрое изменение значения CSS-свойств при помощи клавиатуры и колеса мыши
   38.  Прокрутка элемента в области видимости
   39.  Node.js: Использование Babel для запуска ES6
   40.  Переход к просмотру и редактированию CSS или Javascript-файлов из панели «Elements»
   41.  Отображение значений Javascript-переменных рядом с кодом в процессе отладки
   42.  Использование цветовой группировки в панели «Network» для упрощения идентификации типа ресурса
   43.  Активация псевдо классов DOM-элемента
   44.  Инспектирование самих инструментов разработчика
   45.  Запуск выбранного блока кода из панели «Sources»
   46.  Установка условных точек останова
   47.  Переход к следующему вхождению выбранной строки при помощи горячих клавиш
   48.  Редактирование CSS-файла в панели «Sources» и упрощенное изменение значений CSS-свойств
Читать дальше →
Total votes 34: ↑32 and ↓2+30
Comments0

Information

Rating
Does not participate
Location
Учалы, Башкортостан(Башкирия), Россия
Date of birth
Registered
Activity