Nano Hash - криптовалюты, майнинг, программирование

Ограничение доступа к пользовательскому коду в Rails

Я работаю над приложением rails, которое принимает рубиновый код в качестве входных данных и выполняет его. Поскольку отправленный код поступает из ненадежного домена, я хочу ограничить доступ к определенным методам и модулям. Например, я не хочу, чтобы пользователи имели доступ к File.read или open().

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

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

Codeschool.com предлагает интерактивные руководства. Мне интересно, ограничивают ли они доступ к пользовательскому коду или вообще проводят какую-либо проверку.


Ответы:


1

Я всегда с удовольствием использовал shikashi для подобных задач.

28.07.2013
  • Это выглядело очень многообещающе, но версия (0.5.2), которую я использовал, содержала много ошибок. Некоторые примеры не работали ссылка. 30.07.2013

  • 2

    В Ruby для этого есть встроенная функция, $SAFE

    Некоторое введение вы можете найти здесь http://edwinmeyer.com/Release_Integrated_RHG_09_10_2008/chapter07.html и то можно запросто еще погуглить (могу порекомендовать только книги)

    Также загляните сюда http://www.ruby-doc.org/docs/ProgrammingRuby/html/taint.html

    Насколько я помню, решение здесь состоит в том, чтобы загрузить ваше приложение, затем поднять уровень $SAFE до 4 в потоке, выполнить там код (его нельзя понизить позже, поэтому вам сначала нужно разрешить загрузку Rails на уровне 0)

    28.07.2013
    Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..