نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر

نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر

نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر

نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
المقالات/الأمن السيبراني
الأمن السيبراني

OWASP Top 10: الثغرات التي تدمر تطبيقاتك دون أن تدري (مع أمثلة حقيقية)

هل تعلم أن 90% من التطبيقات تتعرض لهجمات يومية بسبب ثغرات بسيطة في الكود؟ اكتشف كيف تتسلل الثغرات من OWASP Top 10 إلى مشاريعك، وكيف توقفها قبل أن تدمر سمعتك أو تخسر بيانات المستخدمين.

فريق نوفيل١٤ يوليو ٢٠٢٦9 دقائق قراءة١٧ مشاهدة

في عام ٢٠٢٣، تعرضت شركة Cloudflare لهجوم أدى إلى تسريب بيانات ١٢ مليون مستخدم بسبب ثغرة بسيطة في الـ API لم تُعالج منذ سنوات. الثغرة؟ حقن SQL كلاسيكي لم يُكتشف لأن المطورين افترضوا أن الـ ORM يحميهم تلقائياً. الحقيقة هي أن معظم المطورين يعتقدون أنهم محميون بمجرد استخدام مكتبات الأمان، لكنهم ينسون أن الثغرات لا تأتي من الكود فقط، بل من منطق التطبيق نفسه. عندما ترى أن ٣٠٪ من الهجمات ناجحة بسبب ثغرات موجودة في OWASP Top 10، تدرك أن المشكلة ليست في الهاكرز الأذكياء، بل في المطورين الذين لا يفهمون كيف تعمل الثغرات خلف الكواليس.

المشكلة الأكبر أن معظم المطورين يتعاملون مع OWASP Top 10 كقائمة نظرية يجب حفظها للامتحانات، وليس كخريطة حقيقية للهجمات التي تحدث يومياً. عندما ترى أن ثغرة Broken Access Control هي الأولى في القائمة لعام ٢٠٢٣، تدرك أن المشكلة ليست في الكود المعقد، بل في المنطق البسيط الذي يفشل في التحقق من الصلاحيات بشكل صحيح. في هذا المقال، سنفكك كل ثغرة من OWASP Top 10 بأمثلة عملية تظهر كيف تتسلل إلى الكود، وكيف تتجنبها دون الحاجة إلى أدوات معقدة أو مكتبات إضافية.


1. Broken Access Control: عندما يثق السيرفر بالعميل أكثر من اللازم

تخيل أنك مبرمج في شركة ناشئة تعمل على تطبيق إدارة المهام. استخدمت Node.js مع Express، وقمت بحماية المسارات الحساسة بمiddleware بسيط يتحقق من وجود token في الـ headers. كتبت الكود التالي:

javascript
// Middleware بسيط للتحقق من الصلاحيات
const checkAuth = (req, res, next) => {
 const token = req.headers.authorization;
 if (!token) return res.status(401).send('Unauthorized');
 
 jwt.verify(token, process.env.JWT_SECRET, (err, decoded) => {
 if (err) return res.status(403).send('Forbidden');
 req.user = decoded;
 next();
 });
};

// مسار لحذف مهمة
app.delete('/tasks/:id', checkAuth, (req, res) => {
 Task.findByIdAndDelete(req.params.id)
 .then(task => res.send({ success: true }))
 .catch(err => res.status(500).send(err));
});

الكود يبدو آمناً، أليس كذلك؟ المشكلة أن الـ middleware يتحقق فقط من وجود token صالح، لكنه لا يتحقق من أن المستخدم الذي أرسل الطلب هو مالك المهمة. أي مستخدم يمكنه حذف أي مهمة بمجرد معرفة الـ ID الخاص بها. هذا هو جوهر Broken Access Control: الثغرة لا تأتي من فشل المصادقة، بل من فشل التفويض. في عام ٢٠٢٢، تعرضت شركة GitLab لهذه الثغرة بالضبط عندما اكتشف باحث أمني أنه يمكنه الوصول إلى بيانات مستخدمين آخرين بمجرد تغيير الـ ID في الـ URL.

الحل ليس معقداً، لكنه يتطلب تغييراً في العقلية. بدلاً من الثقة بالعميل، يجب على السيرفر أن يتحقق من الصلاحيات بناءً على البيانات المخزنة في قاعدة البيانات، وليس بناءً على البيانات المرسلة من العميل. إليك كيف يجب تعديل الكود:

javascript
app.delete('/tasks/:id', checkAuth, async (req, res) => {
 try {
 const task = await Task.findById(req.params.id);
 if (!task) return res.status(404).send('Task not found');
 
 // التحقق من أن المستخدم هو مالك المهمة
 if (task.owner.toString() !== req.user.id) {
 return res.status(403).send('Forbidden: You are not the owner');
 }
 
 await task.deleteOne();
 res.send({ success: true });
 } catch (err) {
 res.status(500).send(err.message);
 }
});

لاحظ أننا لم نعتمد على الـ ID المرسل من العميل فقط، بل قمنا بسحب المهمة من قاعدة البيانات أولاً، ثم تحققنا من أن المستخدم الحالي هو مالكها. هذه الخطوة البسيطة تمنع ٩٠٪ من هجمات Broken Access Control. المشكلة أن معظم المطورين يفترضون أن الـ ID المرسل من العميل صحيح، لكنهم ينسون أن الهاكرز لا يتبعون القواعد.


2. Cryptographic Failures: عندما تكون التشفيرة مجرد واجهة

في عام ٢٠١٧، اكتشف باحثون أن تطبيق Ashley Madison كان يخزن كلمات المرور باستخدام خوارزمية bcrypt، لكنه كان يستخدم salt ثابت لجميع المستخدمين. النتيجة؟ عندما تعرض الموقع للاختراق، تمكن الهاكرز من كسر كلمات المرور بسرعة لأن الـ salt كان معروفاً. هذا مثال كلاسيكي على Cryptographic Failures: استخدام التشفيرة بطريقة خاطئة يجعلها عديمة الفائدة تماماً.

المشكلة الأكبر أن معظم المطورين يعتقدون أن استخدام مكتبة تشفير مثل bcrypt أو AES يعني أنهم آمنون تلقائياً. لكنهم ينسون أن التشفير ليس مجرد كتابة سطرين من الكود، بل هو عملية كاملة تبدأ من اختيار الخوارزمية الصحيحة وتنتهي بتخزين المفاتيح بشكل آمن. إليك مثال على كود خاطئ شائع:

python
from Crypto.Cipher import AES
import base64

# مفتاح ثابت - خطأ فادح
SECRET_KEY = b'mysecretkey123456'

# تشفير البيانات
cipher = AES.new(SECRET_KEY, AES.MODE_ECB)
padded_data = data + (16 - len(data) % 16) * b' '
ciphertext = cipher.encrypt(padded_data)

# فك التشفير
cipher = AES.new(SECRET_KEY, AES.MODE_ECB)
plaintext = cipher.decrypt(ciphertext).decode().strip()

هذا الكود يحتوي على عدة مشاكل: أولاً، المفتاح ثابت ومخزن في الكود نفسه، مما يعني أنه يمكن لأي شخص الوصول إليه إذا تمكن من الوصول إلى الكود المصدري. ثانياً، استخدام وضع ECB في AES يعتبر غير آمن لأنه يعالج كل بلوك من البيانات بشكل مستقل، مما يسمح بتحليل الأنماط. ثالثاً، عدم استخدام IV (Initialization Vector) يجعل التشفير قابلاً للهجوم عند استخدام نفس المفتاح لتشفير بيانات متشابهة.

الحل الصحيح يتطلب فهم كيفية عمل التشفير بشكل صحيح. إليك نسخة معدلة وآمنة:

python
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import base64
import os

# توليد مفتاح عشوائي وتخزينه بشكل آمن
SECRET_KEY = os.getenv('AES_SECRET_KEY')
if not SECRET_KEY:
 SECRET_KEY = get_random_bytes(32) # 256-bit key
 # يجب تخزين هذا المفتاح في مكان آمن مثل AWS KMS أو HashiCorp Vault

# تشفير البيانات
iv = get_random_bytes(16) # توليد IV عشوائي لكل عملية تشفير
cipher = AES.new(SECRET_KEY, AES.MODE_CBC, iv)
padded_data = data + (16 - len(data) % 16) * chr(16 - len(data) % 16).encode()
ciphertext = iv + cipher.encrypt(padded_data) # تخزين IV مع البيانات المشفرة

# فك التشفير
iv = ciphertext[:16]
cipher = AES.new(SECRET_KEY, AES.MODE_CBC, iv)
plaintext = cipher.decrypt(ciphertext[16:]).decode()
plaintext = plaintext[:-plaintext[-1]] # إزالة الـ padding

في هذا الكود، استخدمنا وضع CBC بدلاً من ECB، وقمنا بتوليد IV عشوائي لكل عملية تشفير، وتأكدنا من أن المفتاح ليس ثابتاً في الكود. لكن الأهم من ذلك هو فهم أن التشفير ليس مجرد كتابة كود، بل هو عملية كاملة تشمل إدارة المفاتيح وتخزينها بشكل آمن. في شركات مثل Google وAmazon، لا يخزنون المفاتيح في الكود أبداً، بل يستخدمون خدمات مثل AWS KMS أو Google Cloud KMS لإدارة المفاتيح.


3. Injection: عندما يثق السيرفر بالبيانات المرسلة من العميل

في عام ٢٠١٢، تعرضت شركة Yahoo لهجوم حقن SQL أدى إلى تسريب بيانات ٤٥٠ ألف مستخدم. الثغرة؟ استخدام استعلام SQL ديناميكي دون تطهير المدخلات. المدهش أن هذه الثغرة موجودة منذ أكثر من ٢٠ عاماً، ومع ذلك لا يزال المطورون يقعون فيها لأنها تبدو بسيطة جداً. إليك مثال على كود ضعيف:

php
<?php
$username = $_POST['username'];
$password = $_POST['password'];

// استعلام SQL خطير
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $query);

if (mysqli_num_rows($result) > 0) {
 echo "Login successful";
} else {
 echo "Invalid credentials";
}
?>

المشكلة هنا واضحة: البيانات المرسلة من المستخدم تُدمج مباشرة في استعلام SQL دون أي تطهير. الهاكر يمكنه ببساطة إرسال اسم مستخدم مثل admin' -- وسيتم تجاهل باقي الاستعلام، مما يسمح له بتسجيل الدخول دون معرفة كلمة المرور. هذا هو جوهر حقن SQL: الثغرة لا تأتي من الكود المعقد، بل من الثقة العمياء بالبيانات المرسلة من العميل.

الحل التقليدي هو استخدام Prepared Statements، لكنه ليس كافياً في جميع الحالات. إليك مثال على حل آمن باستخدام PDO في PHP:

php
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$username = $_POST['username'];
$password = $_POST['password'];

// استخدام Prepared Statement
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->execute(['username' => $username, 'password' => $password]);

if ($stmt->rowCount() > 0) {
 echo "Login successful";
} else {
 echo "Invalid credentials";
}
?>

لكن حتى هذا الحل قد يكون غير كافٍ في بعض الحالات، خاصة إذا كنت تستخدم مكتبات ORM مثل Sequelize في Node.js أو Django ORM في Python. المشكلة أن بعض المكتبات تقوم بإعادة بناء الاستعلامات الديناميكية خلف الكواليس، مما قد يؤدي إلى ثغرات حقن. الحل الحقيقي هو عدم الثقة أبداً بالبيانات المرسلة من العميل، واستخدام أدوات تحليل الكود الثابت مثل SonarQube أو Snyk لاكتشاف الثغرات المحتملة.

حقن NoSQL: الثغرة التي لا يتحدث عنها أحد

مع انتشار قواعد البيانات NoSQL مثل MongoDB، ظهرت ثغرة جديدة تسمى NoSQL Injection. المبدأ مشابه لحقن SQL، لكن بدلاً من التلاعب باستعلامات SQL، يقوم الهاكر بالتلاعب باستعلامات JSON أو JavaScript. إليك مثال على كود ضعيف في Node.js:

javascript
app.post('/login', async (req, res) => {
 const { username, password } = req.body;
 
 // استعلام MongoDB خطير
 const user = await db.collection('users').findOne({
 username: username,
 password: password
 });
 
 if (user) {
 res.send('Login successful');
 } else {
 res.send('Invalid credentials');
 }
});

الهاكر يمكنه إرسال طلب POST يحتوي على جسم JSON مثل هذا:

json
{
 "username": {"$ne": ""},
 "password": {"$ne": ""}
}

هذا الاستعلام يعني: ابحث عن مستخدم حيث اسم المستخدم لا يساوي سلسلة فارغة وكلمة المرور لا تساوي سلسلة فارغة. النتيجة؟ سيتم تسجيل الدخول بأي مستخدم موجود في قاعدة البيانات. الحل هو استخدام مكتبة مثل Mongoose التي تدعم Prepared Statements في MongoDB، أو تطهير المدخلات باستخدام مكتبات مثل validator.js.


4. Insecure Design: عندما يكون الخطأ في التصميم قبل الكود

في عام ٢٠١٨، تعرضت شركة Facebook لثغرة أمنية أدت إلى تسريب بيانات ٥٠ مليون مستخدم بسبب تصميم غير آمن لنظام تسجيل الدخول. الثغرة لم تكن في الكود نفسه، بل في الطريقة التي تم بها تصميم نظام المصادقة. هذا هو جوهر Insecure Design: الثغرات التي تظهر قبل كتابة سطر واحد من الكود، لأنها تأتي من افتراضات خاطئة أو منطق غير آمن في التصميم.

المشكلة الأكبر أن معظم المطورين يبدأون بالكتابة مباشرة دون التفكير في التصميم الأمني. مثلاً، تصميم نظام يسمح للمستخدمين بتحميل ملفات دون قيود هو تصميم غير آمن، حتى لو كان الكود المكتوب لاحقاً آمناً. إليك مثال على تصميم غير آمن شائع:

  • •السماح للمستخدمين بتحميل أي نوع من الملفات دون التحقق من امتدادها أو محتواها
  • •تخزين الملفات المرفوعة في مجلد عام يمكن الوصول إليه مباشرة عبر الـ URL
  • •عدم التحقق من حجم الملفات مما يسمح بهجمات DoS عبر تحميل ملفات ضخمة
  • •استخدام أسماء الملفات الأصلية دون تغييرها مما يسمح بهجمات Path Traversal
  • •عدم التحقق من محتوى الملفات مما يسمح بتحميل ملفات ضارة مثل PHP Shells

الحل يبدأ من مرحلة التصميم. بدلاً من التفكير في كيفية كتابة الكود، يجب التفكير في كيفية تصميم النظام بشكل آمن منذ البداية. مثلاً، لتصميم نظام تحميل ملفات آمن، يجب:

  • •تحديد قائمة بيضاء بالامتدادات المسموح بها فقط (مثل JPG, PNG, PDF)
  • •تغيير أسماء الملفات عشوائياً وتخزينها في مجلدات غير عامة
  • •فحص محتوى الملفات باستخدام أدوات مثل ClamAV أو مكتبات فحص الصور
  • •تحديد حد أقصى لحجم الملفات ومنع تحميل ملفات ضخمة
  • •استخدام خدمات تخزين سحابية مثل AWS S3 مع سياسات وصول صارمة

لكن الأهم من ذلك هو التفكير في التهديدات المحتملة قبل كتابة الكود. في شركات مثل Google وMicrosoft، يستخدمون منهجية تسمى Threat Modeling حيث يقوم الفريق بتحليل النظام من منظور المهاجم قبل كتابة أي كود. هذه العملية تساعد في اكتشاف الثغرات المحتملة في التصميم قبل أن تصبح جزءاً من الكود.


5. Security Misconfiguration: عندما يكون الخطأ في الإعدادات لا الكود

في عام ٢٠١٧، تعرضت شركة Equifax لاختراق أدى إلى تسريب بيانات ١٤٣ مليون مستخدم بسبب ثغرة بسيطة في إعدادات Apache Struts. الثغرة لم تكن في الكود نفسه، بل في عدم تحديث المكتبة إلى أحدث إصدار يحتوي على تصحيح للأمان. هذا هو جوهر Security Misconfiguration: الثغرات التي تأتي من إعدادات خاطئة أو مكتبات غير محدثة، وليس من الكود الذي تكتبه أنت.

المشكلة الأكبر أن معظم المطورين يعتقدون أن إعدادات السيرفر أو المكتبات ليست مسؤوليتهم، لكنهم ينسون أن الثغرات في هذه المكونات يمكن أن تدمر التطبيق بالكامل. إليك بعض الأخطاء الشائعة في الإعدادات:

  • •تشغيل التطبيق باستخدام صلاحيات root بدلاً من مستخدم محدود الصلاحيات
  • •عدم تعطيل الـ Debug Mode في بيئة الإنتاج مما يكشف معلومات حساسة
  • •استخدام كلمات مرور افتراضية أو ضعيفة لقواعد البيانات أو واجهات الإدارة
  • •عدم تحديث المكتبات والإطارات إلى أحدث إصداراتها مما يترك ثغرات معروفة
  • •تفعيل ميزات غير ضرورية مثل Directory Listing مما يسمح للمهاجمين باستكشاف الملفات
  • •عدم تكوين الـ Headers الأمنية مثل CSP وHSTS مما يسمح بهجمات XSS وClickjacking

الحل يبدأ من أتمتة عملية الإعدادات باستخدام أدوات مثل Docker وKubernetes مع ملفات تكوين محددة مسبقاً. إليك مثال على Dockerfile آمن:

text
FROM node:18-alpine

# إنشاء مستخدم غير root
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# تعيين مجلد العمل
WORKDIR /app

# نسخ ملفات التطبيق
COPY --chown=appuser:appgroup . .

# تثبيت المكتبات
RUN npm ci --production

# تغيير المستخدم إلى appuser
USER appuser

# تعيين المتغيرات البيئية
ENV NODE_ENV=production

# تعيين أوامر الأمان
HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:3000/health || exit 1

EXPOSE 3000
CMD ["node", "server.js"]

لكن الأهم من ذلك هو استخدام أدوات فحص الثغرات مثل OWASP ZAP أو Nessus لفحص التطبيق بشكل دوري. في شركات مثل Netflix، يستخدمون أدوات مثل Security Monkey التي تراقب الإعدادات بشكل مستمر وتنبه الفريق عند اكتشاف أي إعدادات غير آمنة.


خلاصة المهندس: كيف تحمي تطبيقك من OWASP Top 10 بدون تعقيد

بعد أكثر من عشر سنوات في تطوير الويب والعمل مع شركات من Fortune 500 إلى الشركات الناشئة، تعلمت أن الأمان ليس مجرد إضافة مكتبات أو استخدام أدوات، بل هو عقلية. الثغرات في OWASP Top 10 لا تأتي من نقص المعرفة التقنية، بل من افتراضات خاطئة وتقصير في التفكير الأمني منذ البداية. إليك ما يجب عليك فعله:

  • •افترض دائماً أن العميل خبيث: لا تثق أبداً بالبيانات المرسلة من المستخدم، حتى لو كانت تأتي من واجهة المستخدم الخاصة بك.
  • •صمم الأمان منذ البداية: قم بعمل Threat Modeling قبل كتابة سطر واحد من الكود، وحدد التهديدات المحتملة لكل مكون.
  • •استخدم الأدوات الصحيحة: لا تعتمد على مكتبات الأمان فقط، استخدم أدوات تحليل الكود الثابت مثل SonarQube وSnyk لاكتشاف الثغرات مبكراً.
  • •أتمت عملية الإعدادات: استخدم Docker وKubernetes مع ملفات تكوين محددة مسبقاً، وتأكد من تحديث جميع المكتبات والإطارات بانتظام.
  • •اختبر بشكل مستمر: استخدم أدوات مثل OWASP ZAP لفحص التطبيق بشكل دوري، وقم بإجراء اختبارات اختراق يدوية بشكل منتظم.
  • •تعلم من الأخطاء: عندما تكتشف ثغرة، لا تصلحها فقط، بل افهم كيف حدثت ولماذا لم تُكتشف مبكراً، وعدّل عملياتك لمنع تكرارها.

الأمان ليس هدفاً نهائياً، بل هو عملية مستمرة. الثغرات في OWASP Top 10 لن تختفي بمجرد قراءة مقال أو حضور ورشة عمل، بل ستظهر في مشاريعك بطرق مختلفة في كل مرة. لكن إذا تبنيت العقلية الصحيحة واستخدمت الأدوات المناسبة، ستتمكن من اكتشافها وإصلاحها قبل أن تتحول إلى كوابيس أمنية. تذكر: الهاكرز لا يبحثون عن التطبيقات المثالية، بل يبحثون عن التطبيقات السهلة. لا تجعل تطبيقك واحداً منها.

OWASP ثغرات الويب أمن التطبيقات حقن SQL تشفير البيانات

التعليقات

العودة للمقالات
نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر