tutorial seguridad rails qué proyecto mundo modelos librosweb hola ejecutar controlador ruby-on-rails ruby testing url parsing

ruby on rails - seguridad - ¿Cómo puedo analizar fácilmente una URL con parámetros en una prueba de Rails?



seguridad en ruby on rails (2)

Quieres Addressable para esto.

uri = Addressable::URI.parse("http://example.com/?var=value") uri.query_values # => {"var"=>"value"} uri.query_values = {"one" => "1", "two" => "2"} uri.to_s # => "http://example.com/?two=2&one=1"

Manejará automáticamente todas las reglas de escape por usted, y tiene algunas otras características útiles, como no lanzar excepciones para URI perfectamente válidas pero oscuras como el analizador de URI incorporado.

Tengo un código que incrusta una URL return_to en una redirección (como OpenID) que quiero probar:

def test_uses_referrer_for_return_to expected_return_to = ''http://test.com/foo'' @request.env[''HTTP_REFERER''] = expected_return_to get :fazbot # @response.redirected_to looks like http://service.com?...&return_to=[URI-encoded version of URL above]&... encoded_return_to = (something_here)[:return_to] assert_equal expected_return_to, URI.unencode(encoded_return_to) end

Es un Rails ActionController::TestCase , así que tengo acceso a todo tipo de métodos de ayuda; Simplemente no puedo encontrar la correcta

Por supuesto, podría usar URI.parse para obtener la parte de parámetros de la URL, luego dividirlo en /&|?/ Y luego dividir nuevamente en ''='' , pero espero que esto ya esté hecho para mí. Además, ¿qué pasa si me olvido de alguna regla oscura en el escape de URL o el análisis de parámetros? Tiene que haber algo en ActionPack o ActiveSupport para hacer esto, pero no puedo encontrarlo.

Gracias :)


CGI::parse(querystring) analizará una cadena de consulta en un hash. Luego, CGI::unescape(string) deshará cualquier codificación de URL en el valor.

Alternativamente, puedes usar Rack::Utils.parse_query y Rack::Utils.unescape si estás en una versión reciente de Rails basada en Rack, y quieres ser súper moderno.

No tengo conocimiento de ningún método auxiliar específico de Rails que envuelva estas funciones de utilidad, pero son bastante fáciles de usar, y CGI o Rack ya están cargados en el entorno de Rails de todos modos.