Я занимаюсь разработкой библиотеки для входа на веб-сайт с использованием CodeIgniter.Код аутентификации следующий:
function signin($username, $password)
{
$CI =& get_instance();
$query_auth=$this->db->query('SELECT user_id, banned FROM user WHERE username=? AND password=SHA1(CONCAT(?,salt)) LIMIT 1', array($username, $password));
if($query_auth->num_rows()!=1)
return 2;
else
{
if($query_init->row()->banned==1)
return 3;
else
{
$CI->load->library('session');
$this->session->set_userdata('gauid', $query_auth->row()->user_id);
return 1;
}
}
}
Возвращаемые значения, означающие успех, неудачу или запрет.У каждого пользователя есть уникальная соль, хранящаяся в базе данных.
Первоначально я взял соль из базы данных, соединил введенный пользователем пароль и соль из базы данных в PHP, а затем снова запросил базу данных с объединенным значением.Я думал, что это ускорит процесс, так как требуется только одна поездка в базу данных, а кода меньше.Я также подумал, что это будет в равной степени безопасно, однако после прочтения топ-ответа на этот вопрос Соль мои хэши с PHP и MySQL ...
Прежде всего, ваша СУБД(MySQL) не требуется поддержка криптографических хэшей.Вы можете делать все это на стороне PHP, и это также то, что вы должны делать.
... Я начал задаваться вопросом, была ли проблема с безопасностью, которую я не заметил.
Есть ли что-то не так в этом коде?