taint
y trust
son parte de Ruby's security model. En Ruby, cada objeto tiene algunas banderas que lleva consigo, dos de las cuales son la bandera de confianza y la bandera contaminada. Cómo se actúa sobre estas banderas depende de algo llamado nivel seguro. El nivel de seguridad se almacena en $SAFE
.
Cada hilo y fibra en un programa puede tener su propio nivel seguro. Los niveles de seguridad van desde 0 hasta 4, con 0 impidiendo que haya seguridad y 4 aplicando tanto que solo debería usarse cuando está eval
código de codificación. Usted no puede asignar un valor inferior a $SAFE
de lo que ya tiene. Además, en los sistemas UNIX, donde un guión rubí funciona como setuid, Ruby ajusta automáticamente el nivel de seguridad a 1.
Corrompiendo
Cuando un objeto se está contaminada conjunto del indicador, que significa, más o menos, que el objeto vino de una fuente poco confiable y, por lo tanto, no se puede usar en operaciones confidenciales. Cuando el nivel de seguridad es 0, se ignora el indicador de contaminación (pero todavía está configurado, puede prestarle atención si lo desea). Hay algunos métodos relacionados con la contaminación:
taint
- Hacer un objeto contaminado. Puede manchar un objeto en todos los niveles con la excepción del nivel seguro 4.
tainted?
- Verifique si un objeto está contaminado.
untaint
- Eliminar la contaminación de un objeto. Esto puede solo usarse en niveles seguros 0, 1 y 2.
He aquí un ejemplo de la pragprog pico (source) que muestra contaminar:
# internal data
# =============
x1 = "a string"
x1.tainted? → false
x2 = x1[2, 4]
x2.tainted? → false
x1 =~ /([a-z])/ → 0
$1.tainted? → false
# external data
# =============
y1 = ENV["HOME"]
y1.tainted? → true
y2 = y1[2, 4]
y2.tainted? → true
y1 =~ /([a-z])/ → 1
$1.tainted? → true
En resumen, no se puede utilizar métodos peligrosos en los datos corrompidos. Así que si usted hace esto en el nivel de seguridad 3, se obtendría un error:
eval(gets)
Confianza
confianza es mucho más simple. La confianza tiene que ver con si el objeto provino de una fuente confiable o no confiable, básicamente, si proviene de algo menos que el nivel seguro 4 o el nivel seguro 4. No estoy seguro de exactamente qué efecto tiene la confianza de Ruby, pero tome una mira aquí: http://www.ruby-forum.com/topic/1887006.
Éstos son algunos de los recursos más: http://phrogz.net/ProgrammingRuby/taint.html - algunas grandes cosas en niveles seguros, pero yo creo que es de 1,8 - existe una versión actualizada de 1,9, sólo sólo en la versión impresa del libro.
http://www.ruby-forum.com/topic/79295 - En caso de que la seguridad sea lo suficientemente segura.
Ellos son parte del modelo de seguridad de Ruby. – Linuxios
Okk, alguna vez lo usamos en algunos casos, alguna vez ha tenido la oportunidad de meterse con eso. la palabra seguridad lo hace más interesante :) – PriteshJ
No he trabajado con ellos, pero podría dar una respuesta pronto. Es de noche donde estoy, así que tal vez por la mañana. – Linuxios