[OpenURI в руби это стандартная библиотека сильно упрощающая работу с URL][1] так как она объеденяет в себе Net:HTTP/HTTPS/FTP и представляет из себя всего лишь метод open. Насколько я знаю это самый популярный способ для скачивания файла, GET запроса или чтения данных. Но на деле `require "open-uri"` патчит [Kernel.open][2] и вызывает разный код для разных аргументов, что может привести к удаленному выполнению кода или чтению любого файла на сервере! `open(params[:url])` это выполнение кода для url=`|ls` Все что начинается с | рассматривается как системный вызов. `open(params[:url]) if params[:url] =~ /^
http://` не лучше для url=`|touch n;\n
http://url.com` ([сломанные регулярки могут привести к RCE, используйте \\A\\z][3]). [Читать дальше →][4]
[1]:
http://ruby-doc.org//stdlib-1.9.3/libdoc/open-uri/rdoc/OpenURI.html
[2]:
http://ruby-doc.org//core-2.2.0/Kernel.html#method-i-open
[3]:
http://homakov.blogspot.com/2012/05/saferweb-injects-in-various-ruby.html
[4]:
http://habrahabr.ru/post/251823/#habracut