Pull to refresh

Mozilla усилила защиту пользователей Firefox от вредоносного кода

Reading time 2 min
Views 5.1K
Firefox Information Security *JavaScript *Browsers
imageФото: Doug Belshaw/Flickr

Mozilla расширила защиту пользователей браузера Firefox от атак с попытками внедрения вредоносного кода. Разработчики сосредоточились на удалении «потенциально опасных артефактов» в исходном коде Firefox.

Под артефактами подразумеваются встроенные скрипты и функции типа eval(). Mozilla рассчитывает улучшить защиту встроенных служебных страниц «about:» за счет удаления таких кусков кода.
Читать дальше →
Total votes 24: ↑20 and ↓4 +16
Comments 12

Eval или include?

Reading time 3 min
Views 9.2K
PHP *
Один из текущих проектов разрабатываю на собственном фреймворке, параллельно его обкатывая и дописывая. Зачем мне понадобилось изобретать велосипед, и чем он отличается от существующих, напишу когда буду представлять его общественности. Сейчас же хочется поделиться некоторыми мыслями по поводу производительности и заодно выслушать мнения коллег. Возможно, мои наблюдения будут полезны и тем, кто не использует фреймфорки.

Когда пришлось реализовывать дерево комментариев, столкнулся с необходимостью рекурсивного вызова представления (view в MVC). Так как представления у меня, да и практически везде, — это обычные файлы с кусками HTML-кода и возможностью вставки PHP, то подключаются они с помощью include. Мне стало не по себе, когда представил как этот include вызывается рекурсивно сотни раз. Первая мысль — засунуть файл представления при первом запросе в память и потом выполнять его через eval. Такой подход позволит кешировать код представлений, и даже хранить его в БД. Так как eval кушает только PHP, а представления у нас чистым PHP-кодом не являются, то обрамляем содержимое в '?>' и '<?php'.

Тесты и выводы
Total votes 41: ↑27 and ↓14 +13
Comments 155

Интересная техника сокрытия кодов JS «вируса»

Reading time 2 min
Views 6.2K
Antivirus protection *
Сегодня скинули код, дропающий на машину штатный вирус «отправьте SMS для разблокировки». Предысторию и методику чистки изложил force

Попробовал расковырять. Взял код, отформатировал, стал дебагать… Хм, интересно… В коде идет вызов (после приведения к читабельному виду)

window['eval'](var2);

А вот в var2 — бинарные данные. Ух ты… Но ведь eval не может выполнять бинарные данные!!!

И почему же в eval оказались бинарные данные?
Total votes 97: ↑89 and ↓8 +81
Comments 44

Метапрограммирование

Reading time 9 min
Views 45K
Programming *
Целью этой статьи есть привлечение внимания широкой ИТ-шной общественности к метапрограммированию и всем его многочисленным формам и техникам. Я постарался собрать классификацию всего, что знаю по этой теме, и показать ее применимость не только в умозрительных задачах, но и в разработке рядовых приложений. Но это скорее план для дальнейшего изучения и, я надеюсь, толчек для более активного обсуждения.

UPD: Более новая статья: Метапрограммирование с примерами на JavaScript. И лекция по статье на Youtube (лекция записана в Киевском политехническом институте 18 апреля 2019 года в рамках курса «100 видео-лекций по программированию»):


Читать дальше →
Total votes 43: ↑33 and ↓10 +23
Comments 28

И снова про опасность eval()

Reading time 6 min
Views 112K
Website development *Python *Perfect code *
Translation
Сколько было сломано копий при обсуждении вопроса «Возможно ли сделать eval безопасным?» — невозможно сосчитать. Всегда находится кто-то, кто утверждает, что нашёл способ оградиться от всех возможных последствий выполнения этой функции.
Когда мне понадобилось найти развёрнутый ответ на этот вопрос, я наткнулся на один пост. Меня приятно удивила глубина исследования, так что я решил, что это стоит перевести.

Коротко о проблеме


В Python есть встроенная функция eval(), которая выполняет строку с кодом и возвращает результат выполнения:
assert eval("2 + 3 * len('hello')") == 17

Это очень мощная, но в то же время и очень опасная инструкция, особенно если строки, которые вы передаёте в eval, получены не из доверенного источника. Что будет, если строкой, которую мы решим скормить eval'у, окажется os.system('rm -rf /')? Интерпретатор честно запустит процесс удаления всех данных с компьютера, и хорошо ещё, если он будет выполняться от имени наименее привилегированного пользователя (в последующих примерах я буду использовать clear (cls, если вы используете Windows) вместо rm -rf /, чтобы никто из читателей случайно не выстрелил себе в ногу).
Читать дальше →
Total votes 83: ↑77 and ↓6 +71
Comments 25

Обновление Windows 8.1 Evaluation и Windows Server 2012 R2 Evaluation до полных версий

Reading time 3 min
Views 52K
Development for Windows *
Сегодня я хочу рассказать о двух способах перехода с Evaluation версии Windows на полную – для серверов на базе Windows Server 2012 R2 и для клиентов Windows 8.1. Способы кардинально отличаются, — для серверных ОС переход продуман Microsoft, как простая плановая операция, для клиентских ОС задумка вендора – заставить пользователя выполнить полную переустановку системы. Предлагаемый ниже способ позволит обновить Evaluation версию Windows 8.1 до полной без переустановки, — а, впрочем, и совершить обратный переход с любой версии Windows 8.1 на Evaluation с сохранением приложений и данных, — если вдруг нужно показать себя честно использующим лишь Evaluation версии проверяющим.
Однако, начнём с простого. Первый вопрос обычно задаётся – а зачем? Дело в том, что в отличии от клиентской системы Windows 8.1 Evaluation, которая через полгода после установки лишь напоминает о своем Evaluation статусе всплывающими сообщениями и чёрным фоном рабочего стола, серверная система раз в час будет перезагружаться, что уже совсем неприятно.
Читать дальше →
Total votes 23: ↑19 and ↓4 +15
Comments 11

evalidate: безопасная обработка пользовательских выражений

Reading time 3 min
Views 6.6K
Information Security *Python *

Зачем нужно


Различная фильтрация есть везде. Например, файрволл netfilter (iptables) имеет свой синтаксис для описания пакетов. В файле .htaccess апача свой язык, как определять, кому давать доступ к каталогу, кому нет. В СУБД свой очень мощный язык (SQL WHERE ...) для фильтрации записей. В почтовых программах (thunderbird, gmail) — свой интерфейс описания фильтров, в соответствии с которыми письма будут раскидываться по папкам.

И везде — свой велосипед.

Для бухгалтерской программы вам может быть удобно позволить пользователю выбрать, кому будет повышена зарплата (все женщины, а так же мужчины возрастом от 25 до 32 лет, либо же до 50 лет если у мужчины имя Вася). И каждому подходящему повысить по пользовательскому выражению ( + 2000 рублей + 20% от прежней зарплаты + по 1000 рублей за каждый год стажа)

Для интернет-магазина (или его админки) — найти все ноутбуки, с памятью от 4 до 8 Gb, которых на складе более 3 штук, но не Acer, или даже Acer, если стоят меньше 30 000 рублей.

Конечно, можно присобачить свою сложную систему фильтров и критериев, сделать для них веб-интерфейс, но проще было бы все сделать в пару строк?

src="(RAM>=4 and RAM<=8 and stock>3 and not brand=='Acer') or (brand=='Acer' and price<30000)"
success, result = evalidate.safeeval(src,notebook)

Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Comments 9

Скриптинг в C# или динамическое выполнение в runtime

Reading time 4 min
Views 15K
.NET *C# *
Tutorial
Sandbox

умаю, не многие знают, что в C# есть штука на подобии eval из других языков. Благодаря Rosyln API, можно во время выполнения скомпилировать и выполнить C# код. Пример использования можете посмотреть в моей реализации REPL-а для C#.

Впервые с такой штукой, как REPL, я познакомился когда теребил питона. В мире .NET есть похожая вещь под названием C# Interactive (CSI). Довольно удобная штука, но у нее есть один большой минус — она входит в состав инструментов Visual Studio, так что без установки VS, не получится ее использовать, а чтобы запускать ее без запуска VS, вообще надо лезть в ее недра (а точнее, через консоль запустить C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat), что так себе.

Есть еще такие проекты, как dotnet-script и cs-script (они работают через Microsoft.CodeAnalysis.CSharp.Scripting), но у них есть фатальный недостаток — они написаны не мной. Вот и появилась мысль, написать свой корявый велосипед, но со своими фичами! (которые тоже коряво работают). После недолгих поисков, мой взор упал на сие чудо: Microsoft.CodeAnalysis.CSharp.Scripting. Из плюсов — удобный API, возможность выполнять код без классов и namespace-ов.

Для начала...

Читать далее
Total votes 21: ↑19 and ↓2 +17
Comments 15

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

Reading time 13 min
Views 1.8K
KTS corporate blog Python *Server optimization *Debugging *

Всем привет! Меня зовут Александр, я занимаюсь backend-разработкой в KTS. 

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

Читать далее
Total votes 15: ↑15 and ↓0 +15
Comments 7

Node.js: Клонирование ключей. Is eval() evil?

Reading time 5 min
Views 2.4K
Тензор corporate blog High performance *JavaScript *Programming *Node.JS *
Tutorial

На примере простой задачи клонирования ключей объекта посмотрим, есть ли реальные альтернативы по производительности столь презираемой JavaScript-разработчиками функции eval().

Подобная задача возникает, если оригинальное значение ключа надо оставить у объекта, а как-то обработанное - положить рядом в новый соответствующий ключ. То есть, для начала, из {"a" : 1, "b" : 2} надо получить {"a" : 1, "a-copy" : 1, "b" : 2, "b-copy" : 2}.

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

Читать далее
Total votes 12: ↑12 and ↓0 +12
Comments 12