База данных
Судя по вашему коду, я вижу, что вы не используете последнюю версию CI (2.0.2 по состоянию на 06/12).
Как указано в changelog , функция getwhere()
(которая теперь называется get_where()
) была заброшена, как и в версии 2.0.
Что касается вечных приложений, вам настоятельно рекомендуется обновить текущую версию, поскольку в то же время было много исправлений, и вы всегда должны полагаться на самую безопасную версию.
mysql_real_escape_string обычно считается «достаточным», чтобы обеспечить хороший уровень безопасности в ваших запросах, но, поскольку это происходит с предшественником (mysql_escape_string), он не на 100% безопасен от всех видов атак, поэтому полагаться на это не лучшая практика. Хотя это безопасно, все еще существуют атаки, которые могут пройти этот фильтр.
Проверьте, среди многих, этот вопрос на SO для получения дополнительной информации об этом.
В коде:
Если вы разрабатываете свое пользовательское приложение, я бы предложил вам по крайней мере использовать расширения mysqli или, что еще лучше, класс PDO ; подготовленные заявления , несомненно, являются самыми безопасными и должны быть одобрены перед всем остальным.
Но мы находимся в контексте структуры, и Codeigniter предлагает 3 отличных способа безопасного запроса вашей базы данных, применяя правильный инструмент для правильного ввода, не беспокоясь об этом. Я говорю о привязках запросов и ручном экранировании с помощью семейства $ this-> db-> escape () и Active Record Class
Вы можете найти примеры использования по ссылкам, которые я только что связал, или прочитать ответы других коллег здесь, поэтому я не буду вдаваться в подробности каждой процедуры в этом посте.
Пароль
Что касается вашего пароля, как уже было сказано другими пользователями, md5()
является теперь ошибочным алгоритмом хеширования. Существуют радужные таблицы, которые могут взломать ваш пароль md5 за относительно короткое время, поэтому вам лучше использовать алгоритмы хеширования с более высоким уровнем безопасности, например sha1 () или sha256, sha512 и другие
В коде:
Codeigniter поставляется с классом помощника по безопасности , который предоставляет вам удобную функцию do_hash()
(может быть dohash()
в вашей более старой установке), которой можно присвоить хэш-код. как параметр (в настоящее время я думаю, что он поддерживает только MD5 и Sha1) и по умолчанию Sha1 () в любом случае.
Другие наблюдения
Мне не совсем понятно, почему вы обвиняете свой логин в инъекциях SQL. Это единственные 2 формы во всей вашей заявке?
Вы не предоставили информацию, чтобы сказать, используете ли вы параметры $ _GET, или вы следуете сегментации URI, но я полагаю, что вы делаете это так, поэтому я предполагаю, что вы в безопасности с этой точки зрения.
Вы должны убедиться, что на вашем веб-сайте нет другой формы ввода, содержащей входные данные, поступающие в базу данных, в противном случае вы можете защитить свой логин сколько захотите, но кто-то может проникнуть через черный ход и прочитать оттуда ваша таблица базы данных и входите на ваш сайт "законным" способом.
Кроме того, может существовать другой источник вторжения, например, взломанный файл cookie. В качестве совета, всякий раз, когда вы решаете использовать фреймворк (а вы делаете себе больше пользы, чем разработку с нуля и все самостоятельно), вы должны стремиться использовать БОЛЬШЕ его функций, особенно когда речь идет о безопасности. Это огромный и очень деликатный вопрос, поэтому вы ДОЛЖНЫ уделите этой теме первоочередное внимание, а хорошо разработанная структура с огромным сообществом и частыми обновлениями - самая близкая к безопасности, которую вы можете получить.
Поэтому вам рекомендуется обновить вашу установку CI (руководства можно найти здесь в их руководстве. Выберите вашу версию и следуйте инструкции), всегда используйте верхнюю инструменты, которые вам дают для каждой задачи, и не думайте, что закрытие вашей двери защитит вас от вторжения из ваших окон. Всегда тщательно проверяйте и исследуйте все возможные причины.
Позднее добавление: Не забудьте XSS, CSRF, фиксации сеансов и другие горячие проблемы безопасности.