Существует распространенная практика отклонения «злонамеренного» пользовательского ввода в приложение rails - PullRequest
0 голосов
/ 11 января 2012

Я использую Ruby on Rails 3.1.0, и я хотел бы знать, что является распространенной практикой предотвращения хранения «вредоносных» значений в базе данных.

Например, у меня есть столбец таблицы базы данных для хранения URL-адресов. Пользователь, пройдя валидацию (просто проверку длины), может отправить URL-адрес, например http://<script>alert('hello!');</script>. Я бы не хотел хранить ссылки, подобные приведенным выше ... как я могу это сделать?

Ответы [ 3 ]

3 голосов
/ 11 января 2012

Для этого нужно использовать URI , чтобы проанализировать предполагаемый URL, а затем проверить каждый компонент:

validate :url_check

def url_check
    u = URI.parse(self.url)
    # check u.scheme, u.userinfo, etc. and  call errors.add(:url, '...')
    # if something is invalid.
rescue URI::InvalidURIError
    errors.add(:url, 'You are being naughty.')
end
1 голос
/ 11 января 2012

Пока эти ссылки находятся в базе данных, они не причиняют вреда.Проблемы могут возникнуть при попытке их рендеринга.Rails отлично справляется с выводом большинства вещей, которые вы выводите (я не осмелился сказать «все», потому что я точно не знаю).

Вы можете быть совершенно уверены и избежать строкисебя:

CGI.escape your_link_url

Ссылка: CGI.escape

0 голосов
/ 11 января 2012

Вы можете использовать регулярное выражение для проверки того, что это действительный URL-адрес без URL-адреса <, '>. И HTML кодирует его там, где он применяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...