Безопасна ли открытая динамическая структура классов Ruby (типизирование утки)? - PullRequest
1 голос
/ 28 сентября 2011

Я новичок в Ruby / Rails-разработчике с многолетним опытом работы с Java. Этот «секретный» вопрос характерен только для ruby, а не для rails, поэтому трудно было найти ответ, так как большинство вопросов безопасности rails имеют дело с веб-контентом.

Как разработчик Java, я несколько раз читал Effective Java.Одним из ключевых моментов этой книги является защита ваших данных и методов в ваших классах от злонамеренных пользователей. Под этим я подразумеваю: зарабатывать как можно большевашего кода, насколько это возможно, используйте неизменяемые классы и используйте защитное копирование при возврате ссылок на неизменяемые объекты. Также можно использовать ключевое слово final.

Но в Ruby все открыто. Конечно, вы можете создать метод /данные закрыты, но как потребитель Ruby API, что-нибудь мешает мне написать собственную версию метода, а затем просто (динамически во время выполнения или в коде) присоединить его к классу в API?безопасность, обсуждаемая в Effective Java, вообще не относится к Ruby. Это просто образ мышления?ифт с явы?Разве это не «недостаток» в Ruby или других похожих языках?

Ответы [ 2 ]

3 голосов
/ 28 сентября 2011

Защита против плохой дизайн, не злоумышленники

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

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

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

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

2 голосов
/ 28 сентября 2011

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

...