ruby ruby-on-rails-4 ptrace

ruby - ¿Cómo se usa ptrace para un sandbox cuando se ejecuta un código no confiable en Rails?



ruby-on-rails-4 (1)

Supongamos que tengo este código de controlador horrible:

class MovesController < ApplicationController def create eval(params[:input]) end end

He estado buscando una mejor manera de lograr la ejecución de un código no confiable durante algún tiempo y me topé con la discusión en esta característica de ruby-lang: https://bugs.ruby-lang.org/issues/8468

La solución real a este problema es ejecutar un sandbox en el nivel superior a Ruby. Ejecuto código no confiable en http://eval.in dentro de una caja de arena basada en ptrace. Charlie Somerville

Investigaciones adicionales sobre el tema no obtuvieron más que pura documentación de ptrace. ¿Existe alguna práctica / biblioteca conocida para usar ptrace en Ruby and Rails o sería necesario configurar su propia solución?


Hay una gema llamada trusted-sandbox para hacer eso. Pero ten cuidado, porque Docker no es realmente a prueba de hackers.

También hay Geordi utilizado por CodePad .

Hubo una implementación de sandbox (con errores) para ruby ​​1.8, pero ya no es compatible.

Pero en realidad, tu pregunta es como la vieja broma donde el paciente dice: "Doctor, me duele cuando hago esto". Y el doctor responde "bueno, no hagas eso".

Hay un millón de cosas que podrías hacer en su lugar:

  • Use un idioma con caja de arena de primera clase (como Lua).
  • Use un lenguaje de plantillas (como líquido o bigote). Escriba su propio analizador para las cosas que realmente deben hacerse.
  • Ejecute el "programa" que se ejecuta en el lado del cliente (en javascript o hotruby ) y solo envíe los datos procesados ​​a su servidor.