PHP Portal | Программирование
رفتن به کانال در Telegram
Присоединяйтесь к нашему каналу и погрузитесь в мир для PHP-разработчика Связь: @devmangx
نمایش بیشتر4 821
مشترکین
-1124 ساعت
-247 روز
-8630 روز
آرشیو پست ها
🎁Осталась одна неделя на то что бы стать программистом в 2024
В телеграмм появился канал в котором бесплатно слили весь топовый контент о программировании! Любой материал, всё разбито по хэш-тэгу в закрепе:
📱 Frontend 👩💻 C++
📱 Python 🤔 Hacking
📱 Java 👩💻 Golang
📱 C# 👩💻 Linux
👩💻 Lua 👩💻 php
👩💻 Kotlin 👩💻 Git
👩💻 Assembler 👩💻 Swift
🖥 SQL 👩💻 Mob. Develop
👣 Backend 🐞 Qa Automation
🖥 Arduino 🖥 Desing
Успей подписаться❗️ @CodHub_tg
Защита чувствительных данных в PHP
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());
}
В этом примере, если аутентификация не удастся, в логе вместо фактического значения пароля будет отображено ***.
👉 @PHPgx | #заметкиОтомстил Binance
Буба работал управляющим в Binance в России. Площадка — всё, и теперь он создал свой канал.
❗️Перед уходом Binance украл у него 200.000$
Теперь он помогает подписчикам выбирать правильные биржи и когда ждать биткоин по 120.000$.
Этой информации нет в интернете — только тут:
📈 Топ-3 проверенных биржи
🪙 Альты, на которых вы сделаете +500% за декабрь
💬 Чат на 6.000+ инвесторов
Буба рассказывает обо всех секретах торговли на крипторынке.
Трейдерский опыт и знания, которых нет нигде:
t.me/+TT9qMUF_Q1Q3MDYy
💡 Совет по Laravel
Передавайте большие файлы без задержек, используя потоки
👉 @PHPgx | #tips
PHP TUI
Фреймворк для создания консольных приложений на PHP с псевдографическим пользовательским интерфейсом.
https://github.com/php-tui/php-tui
👉 @PHPgx | #ресурсы
🧠 Machine Learning — авторский канал, где собрана вся база по ИИ и машинному обучению.
Senior разработчик AI-алгоритмов и автономных агентов, разбирает гайды, редкую литературу и код топовых моделей машинного обучения и искусственного интеллекта.
В 2025 году ИИ выйдет на совершенно новый уровень тот, кто не успеет за прогрессом - отстанет, а кто разберется - сорвет куш.
Стоит подписаться: t.me/ai_machinelearning_big_data
Защита конфиденциальных данных с помощью шифрования и расшифровки
➖ Задача: Безопасно зашифровать данные, чтобы защитить их от несанкционированного доступа, и расшифровать их при необходимости.
➖ Решение:
Используйте расширение Sodium для симметричного шифрования данных.
1️⃣ Генерация ключа шифрования
Сначала нужно создать секретный ключ для шифрования:
$key = sodium_crypto_secretbox_keygen(); // Генерация ключа
file_put_contents('secret.key', $key); // Сохранение ключа в файл
2️⃣ Шифрование данных
$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 "Данные успешно зашифрованы!";
3️⃣ Расшифровка данных
$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}";
🔹Ключ: Генерируется однократно и должен храниться безопасно (например, за пределами кода, в конфигурационных файлах или хранилище секретов).
🔹Nonce (вектор инициализации): Должен быть уникальным для каждого сообщения, но его можно передавать в открытом виде вместе с шифротекстом.
🔹Алгоритм: Sodium использует AES-256-GCM или подобные современные алгоритмы для безопасного шифрования.
➖ Когда использовать:
🔹Защита конфиденциальной информации (паролей, токенов, личных данных).
🔹Шифрование конфигурационных файлов.
🔹Безопасное хранение данных в базе данных.
Никогда не храните ключи шифрования вместе с данными. Используйте безопасные хранилища, такие как HashiCorp Vault или AWS Secrets Manager.
👉 @PHPgx | #заметки💡 Совет по Laravel
Преобразуйте свои массивы в коллекции, чтобы получить доступ ко всем полезным функциям для работы с вашими данными.
👉 @PHPgx | #tips
Давайте будем честны, вы же стремитесь в IT ради денег?
И те из вас кто отсидят за гайдами и книжками 3-4 года и пробьются через 100500 собеседований наконец-то начнут сутками сидеть за монитором ради 100-200 тыс. рублей в месяц.
А в тоже время в России живёт обычная девушка Диана Маркина, которая заработала 3,5 млн. за 2023 год уделяя работе 3-4 часа в неделю.
Такого результата легко можно добиться в трейдинге, используя всего 3 инструмента на Мосбирже: газ, нефть и MOEX.
Для тех, кто мыслит как IT-шник можно выйти на доход от 100 000 рублей💰 уже в первый месяц.
Вам нужно взять алгоритм Дианы, отработать его на специальном тренажёре и повторить на Мосбирже.
Скоро у Дианы стартует бесплатный курс, где она будет бесплатно обучать трейдингу всех желающих, раскроет свой алгоритм торговли и организует практику.
➡️ ЗАПИСЫВАЙТЕСЬ БЕСПЛАТНО
Реклама. ИП Маркина Д. Д., ИНН: 165809314498
Хеширование паролей
➖ Задача:
Безопасно сохранить пользовательский пароль в базе данных, чтобы защитить его от утечек
➖ Решение:
Используйте встроенные функции
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);
}
➖ Рекомендации:
🔹Не храните пароли в открытом виде!
🔹Используйте длину паролей не менее 12 символов и требуйте от пользователей включать буквы, цифры и специальные символы.
🔹Регулярно проверяйте алгоритм хеширования и обновляйте устаревшие хеши.
➖ Пример работы с базой данных:
// Сохранение хеша
$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 'Неверный пароль!';
}
👉 @PHPgx | #заметкиРуководство по SQL 🔥
Это руководство охватывает различные аспекты, начиная с основ SQL и до более сложных тем.
Материал дополнен практическими примерами, которые способствуют лучшему усвоению информации.
👉 @PHPgx | #ресурсы
💡 Совет по Laravel
Легко обновляйте столбцы JSON с помощью синтаксиса стрелок Laravel!
Используйте -> для указания конкретных ключей в ваших JSON-данных.
Работает с MariaDB 10.3+, MySQL 5.7+ и PostgreSQL 9.5+
👉 @PHPgx | #tips
Параметризованные запросы в PHP для безопасной работы с базами данных
Что такое параметризованные запросы? Параметризованные запросы позволяют разделить код SQL-запроса и данные, которые передаются в базу. Это обеспечивает защиту от SQL-инъекций, так как данные, введенные пользователем, обрабатываются как текст, а не как часть SQL-кода.
1️⃣ Как это работает? Параметризованные запросы используют подготовленные выражения (prepared statements). Они выполняются в два этапа:
1. Запрос отправляется в базу данных для компиляции.
2. Переменные передаются и вставляются в компилированный запрос.
2️⃣ Пример использования с MySQLi
<?php
// Подключение к базе данных
$mysqli = new mysqli("localhost", "username", "password", "database");
// Проверка подключения
if ($mysqli->connect_error) {
die("Ошибка подключения: " . $mysqli->connect_error);
}
// Подготовка запроса
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");
if (!$stmt) {
die("Ошибка подготовки запроса: " . $mysqli->error);
}
// Привязка параметров (здесь 's' обозначает строковый тип данных)
$email = "test@example.com";
$stmt->bind_param("s", $email);
// Выполнение запроса
$stmt->execute();
// Получение результата
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo "User: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
}
// Закрытие запроса и соединения
$stmt->close();
$mysqli->close();
?>
3️⃣ Пример использования с PDO
<?php
try {
// Подключение к базе данных
$pdo = new PDO("mysql:host=localhost;dbname=database", "username", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Подготовка запроса
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
// Привязка параметров
$stmt->bindParam(':email', $email);
// Передача значения переменной
$email = "test@example.com";
// Выполнение запроса
$stmt->execute();
// Получение результата
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($users as $user) {
echo "User: " . $user["name"] . " - Email: " . $user["email"] . "<br>";
}
} catch (PDOException $e) {
echo "Ошибка: " . $e->getMessage();
}
?>
4️⃣ Преимущества параметризованных запросов
🔹Безопасность: защита от SQL-инъекций.
🔹Эффективность: запрос компилируется только один раз, независимо от количества выполняемых операций.
🔹Читаемость и структура: разделение SQL-кода и переменных делает код более понятным.
👉 @PHPgx | #заметкиРабота с файлами в PHP: основные операции
PHP предоставляет мощные функции для работы с файлами, будь то чтение, запись или манипуляции с содержимым. Давайте разберем основные операции, которые часто встречаются в разработке
1️⃣ Открытие и закрытие файлов
Для начала работы с файлом нужно его открыть с помощью fopen():
$file = fopen('example.txt', 'r'); // Открыть файл для чтения
if ($file) {
echo "Файл открыт успешно!";
fclose($file); // Закрытие файла
} else {
echo "Не удалось открыть файл.";
}
Режимы открытия файлов:
🔹'r' — только для чтения
🔹'w' — для записи (перезаписывает файл)
🔹'a' — для записи (добавляет в конец файла)
🔹'x' — для создания файла (если файл существует, вызовет ошибку)
2️⃣ Чтение содержимого файла
Для чтения содержимого файла можно использовать fread(), fgets() или file_get_contents()
🔹Чтение всего файла:
$content = file_get_contents('example.txt');
echo $content;
🔹Чтение файла построчно:
$file = fopen('example.txt', 'r');
while ($line = fgets($file)) {
echo $line . "<br>";
}
fclose($file);
🔹Чтение файла в массив
$lines = file('example.txt');
print_r($lines); // Массив строк из файла
3️⃣ Запись в файл
Записать данные в файл можно с помощью fwrite() или file_put_contents()
🔹Запись строки в файл:
$file = fopen('example.txt', 'w');
fwrite($file, "Привет, мир!");
fclose($file);
🔹Запись данных в конец файла:
file_put_contents('example.txt', "Данные добавлены в конец\n", FILE_APPEND);
🔹Запись массива в файл (каждый элемент на новой строке):
$array = ["Строка 1", "Строка 2", "Строка 3"];
file_put_contents('example.txt', implode("\n", $array));
4️⃣ Проверка существования файла
Перед тем как работать с файлом, полезно проверить его наличие:
if (file_exists('example.txt')) {
echo "Файл существует!";
} else {
echo "Файл не найден.";
}
5️⃣ Удаление и переименование файлов
Чтобы удалить файл, используйте unlink(), а для переименования — rename()
🔹Удаление файла:
if (unlink('example.txt')) {
echo "Файл удален.";
} else {
echo "Не удалось удалить файл.";
}
🔹Переименование файла:
if (rename('oldfile.txt', 'newfile.txt')) {
echo "Файл переименован.";
} else {
echo "Ошибка при переименовании.";
}
6️⃣ Манипуляции с путями и директориями
🔹Получение информации о файле:
$file_info = pathinfo('example.txt');
print_r($file_info); // Массив с деталями пути (basename, dirname, extension)
🔹Создание директории:
mkdir('new_directory');
🔹Проверка, является ли путь директорией:
if (is_dir('new_directory')) {
echo "Это директория.";
}
✅ Итог
Работа с файлами в PHP — важная часть любого веб-приложения. С помощью встроенных функций можно эффективно читать, записывать, удалять и изменять файлы. Используйте их с осторожностью, особенно при работе с пользовательским вводом, чтобы избежать ошибок или атак.
👉 @PHPgx | #заметкиНачинать путь в мобильной разработке непросто даже тем, кто уже работает в IT.
В своём канале Илья, android-разработчик с 10-летним стажем, даёт ценные советы о том, как быстрее получить минимальный набор знаний, чтобы устроиться на работу.
Android-разработка на kotlin привлекает множеством вакансий и возможностью освоить за месяц язык, который пригодится даже в бэкенде. А процессы разработки сайтов и приложений во многом похожи.
Подписывайтесь на канал Ильи и получите пошаговый план развития с нуля до Junior.
Также в канале вас ждут лучшие практики, лайфхаки, советы по созданию портфолио и поиску работы.
