TGViewer
Искусство. Код... ИИ? Искусство. Код... ИИ? @art_code_ai · 707 subscribers
Post #48 446
Начало — в предыдущем посте.

💻 Ruby:

• Аналогично JS и Python, опасен рекурсивный deep_merge или любое слияние, которое устанавливает инстанс- или класс-переменные на основе данных пользователя.

• Не доверяйте deep_merge на объектах: стандартный Hash#deep_merge безопасен для чистых хешей, но при объединении атрибутов объекта он может добавить методы. Всегда контролируйте, какие атрибуты ставятся через attr_accessor или instance_variable_set. Если используется ActiveSupport или Hashie для слияния, проверяйте, закрыты ли методы (Hashie блокирует переопределение методов, но ключи вида _/! могут обойти защиту).

• Не используйте eval/instance_eval или небезопасный to_proc на пользовательских данных.

• Ограничивайте область действия включаемых модулей: при include/extend убеждайтесь, что приватность методов не «размывается» — по возможности убирайте ненужные методы через undef_method или делайте их private. Это не устранит атаку слияния, но уменьшит «плохой» код, который можно подменить.

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

🖥 PHP:

• Прямого аналога прототипов тоже нет, но есть опасность перезаписи свойств: функции-слияния с объектов не имеют смысла (результат – stdClass), однако стандартные foreach или (object)$array могут изменить экземпляр класса. Избегайте кода вида foreach($data as $k=>$v) { $obj->$k = $v; } без фильтрации ключей.

• Используйте массивы вместо объектов: например, при json_decode($json) указывайте вторым параметром true, чтобы получить массив, а не объект. Тогда не получится неявно «пролить» данные в объект.

• Проверяйте ключи и поля: если какие-то поля приходят из запроса и затем ставятся в атрибуты объектов — убедитесь, что это ожидаемые поля. Незнакомые ключи — игнорируйте или блокируйте.

• Не используйте unserialize() на пользовательских данных: это другая категория уязвимостей, но тоже позволяет менять внутренние данные объектов. Для передачи сложных структур лучше json_encode/decode с валидацией.

Другие языки:

• В💻 Java и 💻 необходимо следить за безопасностью десериализации и рефлексии (в том числе — неявной, на стороне используемого фреймворка). Например, не внедрять из JSON имена классов/методов напрямую (Class.forName и т.п.); в конфигурационных классах делать поля private final. Используйте sealed или final классы везде, где это возможно. В 👣 и 👣 Rust аналогичная история: в общем подходе по-прежнему нужно валидировать JSON по структуре (Go) и использовать serde/serde_json (Rust) без включения нестандартных поведений.

Как-то так 🤓

⚠ TL;DR:

Лонгрид — не заслуживает внимания, оставайтесь c уязвимыми проектами)

#уязвимости
  • 👍 7
  • ✍ 3
  • ⚡ 2
  • 🌭 1
More from @art_code_ai
  1. Sep 29, 2026Объяснили с Раддой Юрьевой на Хабре, почему смешивать формальные и ИИшные подходы в задача…
  2. Sep 27, 2026🔗 Старый добрый аппсек, часть 2 Продолжаем вспоминать ключевые вехи аппсека и смежных обл…
  3. Sep 26, 2026Post #155
  4. Sep 24, 2026🔗 Старый добрый аппсек, часть 1 ...совершенно незаслуженно задвинутый на второй план ИИ-х…
  5. Sep 23, 2026Post #153
  6. Sep 21, 2026👨‍💻 Продуктивные выходные Как-то незаметно (и неожиданно) для себя с удовольствием провё…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →