Представляют ли тире в строке запроса угрозу безопасности для Ruby on Rails? - PullRequest
0 голосов
/ 10 марта 2011

Я получил исключение в веб-приложении, которое я разрабатываю недавно, по URL-адресу, например:

http://domain.com/script.js?bcsi-ac-16E7C1CCF9EF6357=1C76413C00000002kmNHGZK2deV0Qz25TXynq3fMaPTrBAAAAgAAAD5tGgCEAwAACAAAAPUiAgA=

Прежде всего - что это такое в мире?При поиске это звучит так, как будто это какая-то переменная cookie / session ...

Во-вторых, исключение касалось динамического присвоения константы.Я попробовал более простой URL:

http://domain.com/script.js?bcsi-ac

И это дало исключение из-за того, что переменная или метод 'bcsi' не были определены, как если бы он пытался его оценить ... ЧТО !?Я чертовски надеюсь, что люди не смогут заставить мое приложение Rails оценивать случайный код, просто передав его в строку запроса ...

Чтобы предоставить более подробную информацию: я не делаю ничего необычного с данными строки запроса вмаршрут или контроллер.Я просто беру параметры и передаю их в парциальную часть как локальные (по общему признанию, это не самый чистый способ сделать это, но простой - и это, конечно, не должно вызывать у него оценку параметра как кода?)

Ответы [ 2 ]

1 голос
/ 10 марта 2011

ХОРОШО!Отвечая на мой собственный вопрос снова.Оказывается, что передача параметров в качестве локальных элементов к частичному DOES заставляет его оценивать имя параметра как код - очевидно, он не может использовать имя переменной "bcsi-ac", поэтому он пытается оценить его.

Новопрос о том, представляет ли это угрозу безопасности, все еще остается ... Я не могу вызывать методы или назначать вещи ... но, может быть, я просто недостаточно старался.Мне кажется, что rails должен просто генерировать исключение при передаче локального хэша, который содержит недопустимое имя переменной.

0 голосов
/ 10 марта 2011

Как правило, всякий раз, когда вы разрешаете оценивать строки из вашего URL-адреса как код, вы создаете огромный риск для безопасности своего приложения.вы не сможете вызывать методы в локальных системах, поскольку ваши методы существуют на стороне сервера, а код, который вы анализируете, на стороне клиента, но это, безусловно, открывает ваш сайт для уязвимостей XSS среди других ...

...