2012-08-28 14 views
31

que estaba leyendo acerca de los métodos de cadenas de Ruby en el docs y encontré con los métodos¿Qué son los métodos de confianza de Ruby's Object # y Object # trust?

  • taint
  • trust
  • untaint
  • untrust

No sé lo que hacen , ¿qué situación usamos? Alguien ha usado alguno de ellos? Los ejemplos serían agradables.

+1

Ellos son parte del modelo de seguridad de Ruby. – Linuxios

+0

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

+0

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

Respuesta

48

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.

+1

mantuviste tu palabra y me trajiste algunas felicitaciones geniales, es una gran respuesta la que estaba buscando, Gracias – PriteshJ

+0

@PriteshJ: Claro. Me alegro de poder ayudar. – Linuxios

+0

Encontré un buen enlace y lo agregué como salida de respuesta puede ser que podría ayudar a más personas como yo con eso :) – PriteshJ

4

taint y trust cada uno establece una bandera que el objeto lleva consigo en todas partes. La única diferencia que puedo decir (de ruby-doc.org) es que algunas llamadas a métodos se comportan de manera diferente cuando se les dan objetos contaminados, mientras que la confianza parece depender exclusivamente del programador para interpretarlas.

El principal propósito de la contaminación es marcar la entrada del usuario como potencialmente peligrosa, p. Ej. un script cargado dinámicamente o datos de formulario CGI. A continuación, implementa métodos de desinfección que aseguran que los objetos son seguros y los eliminan antes de usarlos en otro lugar de su código.

Consulte también "What's the purpose of tainting Ruby objects?".

0

Encontré este enlace en mí que da información sobre tainted Datos en ruby.

http://ruby.about.com/od/advancedruby/a/tainted.htm

"Tainted" objects are those that have come from some type of user input. Either from a file, the keyboard or the network, unless the object is a literal in the program or created by the program directly, it will be tainted. The tainted flag is always there on your objects, all you have to do is check it before you do anything unsafe. If you've confirmed that the data is indeed safe, you can then untaint the object.

+0

Enlace redirige a https://www.thoughtco.com/what-is-programming-958331 – infomaniac

+0

Lamentablemente sí @infomaniac. Estaba funcionando al principio – PriteshJ

Cuestiones relacionadas