Я делаю некоторые функции API Войти с MySQLi подготовить и т.д.OpenCart Войти заказ апи с MySQLi подготовить
Надлежащей функцию входа, открытая телега с помощью, является следующей
$customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(utf8_strtolower($email)) . "' AND (password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $this->db->escape($password) . "'))))) OR password = '" . $this->db->escape(md5($password)) . "') AND status = '1' AND approved = '1'");
и я m пытается сделать это с инструкцией make mysqli со следующим кодом.
$result = mysqli_prepare($db, "SELECT customer_id, firstname, lastname, email, telephone, fax, address_id, customer_group_id FROM `oa_customer` WHERE LOWER(email) = ? AND password = ? OR password = ? ;");
$md5pass = md5($password);
$newpass = "SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $password . "'))))"
echo "md5 ";
print_r($md5pass);
echo "new ";
print_r($newpass);
mysqli_stmt_bind_param($result, 'sss', utf8_strtolower($email), $password, $md5pass);
mysqli_stmt_execute($result);
mysqli_stmt_bind_result($result, $customerid, $firstname, $lastname, $email, $telephone, $fax, $address_id, $coustomer_group_id);
while(mysqli_stmt_fetch($result))
{
$id = $customerid;
$name = $firstname;
$surname = $lastname;
$email = $email;
$phone = $telephone;
$fax = $fax;
$addressid = $address_id;
$customergroup = $customer_group_id;
}
mysqli_stmt_close($result);
mysqli_close($db);
Моя единственная проблема эта линия
$newpass = "SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $password . "'))))"
Который пытается представить следующий код первого исходного запроса авторизации
(password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $this->db->escape($password) . "')))))
В то время как я пытаюсь это я получаю ошибку 500 по запросу.
Вторая попытка заключалась в следующем.
Вместо использования
$newpass = "SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $this->db->escape($password) . "'))))"
я заменил его
$newpass = sha1($salt . sha1($salt . sha1($password)));
И снова 500 ошибок. Любая идея, что я должен сделать в моей mysqli, чтобы она была такой же, как исходный запрос?
Спасибо!
** ПРЕДУПРЕЖДЕНИЕ **: Написание собственного уровня контроля доступа непросто, и есть много возможностей, чтобы заставить его серьезно ошибиться. Пожалуйста, не пишите свою собственную систему аутентификации, если какая-либо современная [инфраструктура разработки] (http://codegeekz.com/best-php-frameworks-for-developers/), например [Laravel] (http://laravel.com/) поставляется с надежной системой [authentication system] (https://laravel.com/docs/5.4/authentication). В абсолютном минимуме следуйте [рекомендуемым рекомендациям по безопасности] (http://www.phptherightway.com/#security). – tadman
Использование SHA1, MD5 и других слабых хэшей - защита мусора. Смешивая его немного, чтобы быть «умным», добавляет нулевую безопасность, есть программы взлома, которые будут копить это и пробивать тысячи паролей в секунду, не нарушая пота. ** СДЕЛАЙТЕ ИСПОЛЬЗУЙТЕ ** и используйте ['password_hash'] (http://php.net/manual/en/function.password-hash.PHP). ** НЕ ПРИНИМАЙТЕ ** использовать домашний хеширующий код, подобный этому. – tadman
Я тоже очень смущен, почему, если вы используете OpenCart, вам нужно пойти и написать свой собственный уровень входа. Вы можете объяснить? – tadman