2013-07-21 2 views
0

В настоящее время я разрабатываю прототип для чатбота. Используя devise и can-can я могу создать простой ящик для чата, который через JQuery и Ajax отправляет запросы jsons на сайт и с него. Поскольку я не использовал ни одного из помощников рельсов в моей текущей сборке, любой может отправить объект json на этот url (Позволяет называть его mysite.com/message) и получать ответ от чатбота в Json.Использование рельсов с учетом безопасности

Мне нужна помощь в избавлении от этой уязвимости, чтобы кто-либо, независимо от того, вошли ли они в систему, может отправлять вещи в/сообщение. Если был помощник рельсов, который генерирует что-то похожее на токены аутентификации, которые были бы достаточными. Я разработал несколько сайтов в рельсах, но я все еще участвую в разработке «Rails».

Edit:

Проблема заключается в том, что я не хочу любого зарегистрированного пользователя, чтобы, например, отправить объект JSON в/сообщение, когда оно предназначено для использования только для Chatbox. Если я перейду к URL-адресу, я увижу ответ json в своем браузере.

+0

Пожалуйста, отформатируйте свой вопрос, как бы форматировать свой код (определенно не в форме спагетти) –

ответ

0

Если эти запросы, о которых вы говорите, являются POST, вам необходимо сначала отключить токены аутентификации!

Если они GET (я думаю), то вы можете изменить эти два метода в ваших ApplicationController (оригинальные версии здесь)

# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 174 
def verify_authenticity_token 
    unless verified_request? 
    logger.warn "Can't verify CSRF token authenticity" if logger 
    handle_unverified_request 
    end 
end 

# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 186 
def verified_request? 
    !protect_against_forgery? || request.get? || request.head? || 
    form_authenticity_token == params[request_forgery_protection_token] || 
    form_authenticity_token == request.headers['X-CSRF-Token'] 
end 

особенно в verified_request? изменения, так что проверить и GET запросы.

+0

Мне жаль, Майкл, я не полностью понимаю, что вы говорите. Запросы AJAX, которые я делаю, действительно являются POST. Проблема в том, что аутентификация отсутствует после входа в систему. – Diceydawg

+0

Хорошо, я думал, что вы используете запросы на получение. Забудь об этом. –

0

Безопасность - это неприятно и неприятно.

Если ищете что-то простое и дешевое, чем об отправке куки случайного значения с HTTP_ONLY устанавливается, когда логины в.

Вы сохраняете копию случайной величины и сравнить, когда он возвращается.

Это по-прежнему подвержено обнюхиванию пакетов и человеку в средних атаках, но оно защитит от атак javascript на клиентской странице. У вас есть имя пользователя и прочее из аутентификации ajax и cookie, которые были выпущены при их подписании.

Если безопасность действительно является проблемой, тогда вы должны начать версию 2 и выполнить ее с самого начала. (Насколько правым может быть, так как это движущаяся цель ...)

+0

Я просто собираюсь заблокировать все, кроме запросов json – Diceydawg

Смежные вопросы