2013-02-20 3 views
1

Я новичок в Rails, и я испек этот маленький контроллер входа.Rails 3 - Безопасен ли этот SQL?

def create 
    username = params[:user].downcase 
    user = User.where("username = ? OR email = ?", username, username)[0] 
    if user and user.check_password(params[:password], user.password, user.salt) 
     cookies[:auth] = user.auth 
     redirect_to root_url 
    else 
     flash.now.notice = 'Login failed' 
     render 'new' 
    end 
    end 

Мне интересно, если это безопасно или мне нужно добавить какую-то санитацию поверх имени пользователя?

+3

да это. небольшим советом было бы использовать '.first' вместо' [0] '. если вы также хотите показать нам check_password, включите его в вопрос. – jvnill

+0

Также вы можете взглянуть на этот railscast об аутентификации http://railscasts.com/episodes/250-authentication-from-scratch-revised –

+0

Да, я знаю о .first, но я предпочитаю [0] :) Спасибо за учебник , Я вижу, что он использует has_secure_password, но я предпочитаю делать свое собственное хеширование. –

ответ

4

Если вы используете предоставленный вытекающее объект, который является то, что ? заполнителей для, то вы должны быть защищены от ошибок SQL инъекций при условии вы в последней версии Rails и других важных компонентов.

Пример безопасного кода:

User.where(:username => arg) 
User.where('username=?', arg) 

Пример небезопасных код:

User.where('username="#{arg}"') 

Обратите внимание, что вы должны использовать интерполяцию строки для создания инъекции SQL ошибки. Это должно быть довольно очевидно при проверке кода, и редко бывает оправданием для этого. Если вы по какой-то причине должны быть абсолютно уверены, что любое значение, которое вы вводите, правильно экранировано или происходит из белого списка известных значений.

В старых версиях Rails и некоторых популярных инструментах разбивки на страницы и проверки подлинности были обнаружены SQL-инъекции, которые могут быть использованы. Убедитесь, что у вас есть текущие версии. При необходимости удалите Gemfile.lock и выполните очистку bundle install.

+0

Да, Im on 3.2.12 –

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