أمان تطبيقات الويب PHP: دليل شامل للحماية
أمان تطبيقات الويب PHP: دليل شامل للحماية
دليل متخصص من علاء عامر - مطور ومصمم مواقع وتطبيقات احترافية
أمان التطبيقات هو أولوية قصوى لأي مطور PHP محترف. في هذا المقال، سنغطي أهم الثغرات الأمنية وكيفية حماية تطبيقاتك منها.
2️⃣ الحماية من SQL Injection
المشكلة:
// خطير جداً - لا تفعل هذا أبداً!
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysql_query($query);
الحل الآمن:
class SecureAuth {
private $pdo;
public function __construct($pdo) {
$this->pdo = $pdo;
}
public function authenticateUser($username, $password) {
// استخدام Prepared Statements
$query = "SELECT id, username, password_hash FROM users WHERE username = :username LIMIT 1";
$stmt = $this->pdo->prepare($query);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user && password_verify($password, $user['password_hash'])) {
return $user;
}
return false;
}
public function createUser($username, $email, $password) {
// تشفير كلمة المرور
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
$query = "INSERT INTO users (username, email, password_hash, created_at) VALUES (:username, :email, :password, NOW())";
$stmt = $this->pdo->prepare($query);
$stmt->bindParam(':username', $username);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':password', $hashedPassword);
return $stmt->execute();
}
}
4️⃣ الحماية من CSRF Attacks
class CSRFProtection {
/**
* توليد CSRF token
*/
public static function generateToken() {
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
$token = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $token;
$_SESSION['csrf_token_time'] = time();
return $token;
}
/**
* التحقق من CSRF token
*/
public static function verifyToken($token) {
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
// التحقق من وجود Token في الجلسة
if (!isset($_SESSION['csrf_token']) || !isset($_SESSION['csrf_token_time'])) {
return false;
}
// التحقق من انتهاء صلاحية Token (ساعة واحدة)
if (time() - $_SESSION['csrf_token_time'] > 3600) {
unset($_SESSION['csrf_token'], $_SESSION['csrf_token_time']);
return false;
}
// التحقق من تطابق Token
if (hash_equals($_SESSION['csrf_token'], $token)) {
return true;
}
return false;
}
/**
* إنشاء حقل مخفي للنموذج
*/
public static function getFormField() {
$token = self::generateToken();
return "<input type=\"hidden\" name=\"csrf_token\" value=\"{$token}\">";
}
}
// في النموذج
echo CSRFProtection::getFormField();
// عند استقبال النموذج
if ($_POST && CSRFProtection::verifyToken($_POST['csrf_token'])) {
// معالجة البيانات بأمان
processForm();
} else {
die('Invalid CSRF token');
}
6️⃣ إعداد Headers الأمان
class SecurityHeaders {
public static function setSecurityHeaders() {
// منع تحميل الصفحة في iframe (Clickjacking protection)
header('X-Frame-Options: DENY');
// منع MIME type sniffing
header('X-Content-Type-Options: nosniff');
// تفعيل XSS protection في المتصفح
header('X-XSS-Protection: 1; mode=block');
// إجبار HTTPS
header('Strict-Transport-Security: max-age=31536000; includeSubDomains');
// Content Security Policy
header("Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'");
// إزالة معلومات الخادم
header_remove('X-Powered-By');
}
}
// تطبيق Headers في بداية كل صفحة
SecurityHeaders::setSecurityHeaders();
💡 خلاصة أفضل الممارسات الأمنية
- لا تثق بأي مدخل من المستخدم - نظف واختبر كل شيء
- استخدم HTTPS دائماً - خاصة للبيانات الحساسة
- طبق مبدأ أقل الصلاحيات - أعط أقل صلاحية ممكنة
- حدث تطبيقاتك باستمرار - تابع الثغرات الأمنية الجديدة
- استخدم أدوات فحص الأمان - مثل OWASP ZAP
الخطوة التالية
تعلم Penetration Testing و Security Auditing لتطبيقات PHP.
📩 تحتاج استشارة أمنية لتطبيقك؟
قسم المقالة
أمان تطبيقات الويب PHP: دليل شامل للحماية
كيفية حماية تطبيقات PHP من الثغرات الأمنية الشائعة مع أمثلة عملية وأفضل الممارسات للأمان.
التواصل والاستشارة
تواصل مباشر عبر الواتساب أو الهاتف لفهم احتياجات مشروعك بدقة.
التخطيط والجدولة
وضع خطة عمل واضحة مع جدول زمني محدد لكل مرحلة من المشروع.
البرمجة والتطوير
تطوير المشروع بأحدث التقنيات لضمان الأداء والأمان العاليين.
المراجعة والتسليم
ختبار شامل ومراجعة دقيقة قبل التسليم النهائي للمشروع.