Хеширование паролей
➖ Задача:
Безопасно сохранить пользовательский пароль в базе данных, чтобы защитить его от утечек
➖ Решение:
Используйте встроенные функции
Пример:
🔹
🔹
➖ Проверка хеша:
С помощью функции
➖ Рекомендации:
🔹 Не храните пароли в открытом виде!
🔹 Используйте длину паролей не менее 12 символов и требуйте от пользователей включать буквы, цифры и специальные символы.
🔹 Регулярно проверяйте алгоритм хеширования и обновляйте устаревшие хеши.
➖ Пример работы с базой данных:
👉 @PHPgx | #заметки
Безопасно сохранить пользовательский пароль в базе данных, чтобы защитить его от утечек
Используйте встроенные функции
password_hash() и password_verify().Пример:
// Создание хеша пароля
$password = 'secure_password';
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// Проверка пароля
if (password_verify('secure_password', $hashedPassword)) {
echo 'Пароль верный!';
} else {
echo 'Неверный пароль!';
}
password_hash() автоматически выбирает безопасный алгоритм хеширования, например, bcrypt, и добавляет "соль".password_verify() сравнивает пользовательский ввод с хешем из базы.С помощью функции
password_needs_rehash() можно обновить хеш пароля, если алгоритм был улучшен:if (password_needs_rehash($hashedPassword, PASSWORD_DEFAULT)) {
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
}// Сохранение хеша
$stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)");
$stmt->execute([
'username' => 'user1',
'password' => $hashedPassword,
]);
// Проверка пароля при авторизации
$stmt = $pdo->prepare("SELECT password FROM users WHERE username = :username");
$stmt->execute(['username' => 'user1']);
$storedHash = $stmt->fetchColumn();
if (password_verify('secure_password', $storedHash)) {
echo 'Доступ разрешён!';
} else {
echo 'Неверный пароль!';
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3
Защита конфиденциальных данных с помощью шифрования и расшифровки
➖ Задача: Безопасно зашифровать данные, чтобы защитить их от несанкционированного доступа, и расшифровать их при необходимости.
➖ Решение:
Используйте расширение Sodium для симметричного шифрования данных.
1️⃣ Генерация ключа шифрования
Сначала нужно создать секретный ключ для шифрования:
2️⃣ Шифрование данных
3️⃣ Расшифровка данных
🔹 Ключ: Генерируется однократно и должен храниться безопасно (например, за пределами кода, в конфигурационных файлах или хранилище секретов).
🔹 Nonce (вектор инициализации): Должен быть уникальным для каждого сообщения, но его можно передавать в открытом виде вместе с шифротекстом.
🔹 Алгоритм: Sodium использует AES-256-GCM или подобные современные алгоритмы для безопасного шифрования.
➖ Когда использовать:
🔹 Защита конфиденциальной информации (паролей, токенов, личных данных).
🔹 Шифрование конфигурационных файлов.
🔹 Безопасное хранение данных в базе данных.
Никогда не храните ключи шифрования вместе с данными. Используйте безопасные хранилища, такие как HashiCorp Vault или AWS Secrets Manager.
👉 @PHPgx | #заметки
Используйте расширение Sodium для симметричного шифрования данных.
Сначала нужно создать секретный ключ для шифрования:
$key = sodium_crypto_secretbox_keygen(); // Генерация ключа
file_put_contents('secret.key', $key); // Сохранение ключа в файл
$message = "Конфиденциальные данные";
$key = file_get_contents('secret.key'); // Получение ключа из файла
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); // Генерация случайного вектора инициализации
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);
// Сохранение зашифрованных данных
file_put_contents('data.enc', $nonce . $ciphertext);
echo "Данные успешно зашифрованы!";
$key = file_get_contents('secret.key');
$encrypted = file_get_contents('data.enc');
$nonce = mb_substr($encrypted, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
$ciphertext = mb_substr($encrypted, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');
$decrypted = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
if ($decrypted === false) {
throw new Exception("Ошибка расшифровки данных!");
}
echo "Расшифрованные данные: {$decrypted}";Никогда не храните ключи шифрования вместе с данными. Используйте безопасные хранилища, такие как HashiCorp Vault или AWS Secrets Manager.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4
Please open Telegram to view this post
VIEW IN TELEGRAM
😁45❤1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
PHP TUI
Фреймворк для создания консольных приложений на PHP с псевдографическим пользовательским интерфейсом.
https://github.com/php-tui/php-tui
👉 @PHPgx | #ресурсы
Фреймворк для создания консольных приложений на PHP с псевдографическим пользовательским интерфейсом.
https://github.com/php-tui/php-tui
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17😁4❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🤔2
Защита чувствительных данных в PHP
Как работает
При использовании этого атрибута, PHP скрывает значение параметра в сообщениях об ошибках и логах, заменяя его на
Пример использования:
В этом примере, если аутентификация не удастся, в логе вместо фактического значения пароля будет отображено
👉 @PHPgx | #заметки
sensitive_parameter — это атрибут, позволяющий пометить параметры функций и методов как чувствительные, чтобы исключить их из логов и трейсбеков.Как работает
sensitive_parameter:При использовании этого атрибута, PHP скрывает значение параметра в сообщениях об ошибках и логах, заменяя его на
***. Это помогает предотвратить утечки конфиденциальной информации, такой как пароли или токены.Пример использования:
class UserAuthenticator {
public function authenticate(
#[\SensitiveParameter] string $password
) {
// Логика аутентификации
if ($password !== 'secret') {
throw new \Exception("Authentication failed");
}
}
}
try {
(new UserAuthenticator())->authenticate('wrong_password');
} catch (\Exception $e) {
error_log($e->getMessage());
error_log($e->getTraceAsString());
}В этом примере, если аутентификация не удастся, в логе вместо фактического значения пароля будет отображено
***.Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁31👍3
Как получить список всех свойств объекта
В PHP можно получить список всех свойств объекта с помощью функции
Пример использования функции
Этот код выведет следующий результат:
Функция
👉 @PHPgx | #заметки
В PHP можно получить список всех свойств объекта с помощью функции
get_object_vars(). Эта функция возвращает массив, в котором ключами являются имена свойств, а значениями - их значения.Пример использования функции
get_object_vars():$object = new stdClass();
$object->name = "John Doe";
$object->age = 30;
$properties = get_object_vars($object);
print_r($properties);
Этот код выведет следующий результат:
Array
(
[name] => John Doe
[age] => 30
)
Функция
get_object_vars() может быть полезна, если вам нужно получить список всех свойств объекта. Например, вы можете использовать ее для создания списка всех элементов управления на форме или всех параметров в массиве.Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1
Null-safe оператор PHP
До появления
Оператор позволяет избежать этой ошибки, позволяя безопасно обращаться к свойствам и методам объектов, которые могут быть равными
Примеры:
👉 @PHPgx | #заметки
null-safe оператор ?-> позволяет безопасно обращаться к свойствам и методам объектов, которые могут быть равными null.До появления
null-safe оператора, доступ к свойству или методу объекта, который может быть равным null, мог привести к ошибке NullPointerException.Оператор позволяет избежать этой ошибки, позволяя безопасно обращаться к свойствам и методам объектов, которые могут быть равными
null, без необходимости использования оператора isset().Примеры:
$user = User::findOrFail(1);
$name = $user?->name; // вернет имя пользователя, если $user не равен null
$age = $user?->getAge(); // вернет возраст пользователя, если $user не равен null
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤1
Docker-php
Готовые к использованию образы Docker для PHP
👉 https://github.com/serversideup/docker-php
👉 @PHPgx | #ресурсы
Готовые к использованию образы Docker для PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - serversideup/docker-php: 🐳 Production-ready Docker images for PHP. Optimized for Laravel, WordPress, and more!
🐳 Production-ready Docker images for PHP. Optimized for Laravel, WordPress, and more! - serversideup/docker-php
👍9
Используйте Model Broadcast для обновлений в реальном времени
Model broadcasting в Laravel позволяет получать обновления в реальном времени при создании, обновлении или удалении моделей Eloquent. Это идеально подходит для живых дашбордов или уведомлений.
Включите broadcasting в вашей модели:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
regexpbuilderphp
Интегрирует регулярные выражения в язык программирования, тем самым упрощая их чтение и поддержку. Регулярные выражения создаются с использованием связанных методов и переменных, таких как массивы или строки
👉 https://github.com/gherkins/regexpbuilderphp
👉 @PHPgx | #ресурсы
Интегрирует регулярные выражения в язык программирования, тем самым упрощая их чтение и поддержку. Регулярные выражения создаются с использованием связанных методов и переменных, таких как массивы или строки
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - gherkins/regexpbuilderphp: 🦉 human-readable regular expressions
🦉 human-readable regular expressions. Contribute to gherkins/regexpbuilderphp development by creating an account on GitHub.
👍3🤔3
Что происходит, когда вы вводите URL-адрес в браузере?
Довольно простой вопрос, который могут спросить в ходе собеса
1️⃣ Пользователь вводит URL:
🔹 Браузер ищет IP-адрес в нескольких уровнях кеша (браузера, ОС, локальном и у провайдера).
🔹 Если IP-адрес не найден, запрос отправляется к DNS-резолверу.
2️⃣ Браузер устанавливает TCP-соединение с сервером по протоколу HTTP или HTTPS.
3️⃣ Браузер отправляет HTTP-запрос (GET/POST/...) на сервер для получения данных.
4️⃣ Сервер отправляет HTTP-ответ с нужными данными (HTML, CSS, JS и т. д.), браузер обрабатывает и отображает страницу пользователю.
👉 Источник
👉 @PHPgx
Довольно простой вопрос, который могут спросить в ходе собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👀4🌭1