الحماية | 15 دقيقة قراءة

5 ثغرات خطيرة عليك التأكد من حمايتها في موقعك

يعتبر تأمين وحماية الموقع من الأمور الأساسية للقيام بها قبل نشر موقعك , فأهمية حماية الموقع لا تختلف عن أهمية التسويق او التصميم العام للموقع , تستغرق بعض المشاريع أشهر وربما سنوات كي تجهز تماماً وفي حال تم التغاضي عن الحماية او عدم ايلائها القدر الكافي من الاهتمام فستكون تلك الخطوة الأولى على طريق الفشل , سقوط موقعك نتيجة هجمة الكترونية ليس المشكلة بحد ذاتها , بل المشكلة هي سقوط ثقة المستخدم بموقعك وتدهور سمعتك الإلكترونية التي ربما قضيت مدة طويلة في بنائها وكما يقول  المستثمر الشهير Warren buffett 

بناء سمعة يأخذ منك عشرين سنة لبناءه, وخمس دقائق للهدم. ان فكرت في ذلك, فتعاملك مع الامور ستكون بشكل مختلف

1- حقن SQL 

او ما يسمى ب SQL Injection وهي كانت حقاً ثغرة خطيرة أرهقت مختصي الحماية وهزمت عدة مواقع بسهولة بالغة , وبالمقابل على الرغم من خطورة الثغرة البالغة فلا يبدو أمر حمايتها بتلك الصعوبة خصوصاً بعد انتشار SQL::PDO الجديدة التي وفرت حماية شبه كافية من هذه الثغرة .

وبالنظر لهذه الثغرة نرى أن حمايتها ربما هو أسهل مما نعتقد , ففي الكود التالي نرى مثالاً لطريقة غير آمنة لكتابة أمر SQL

 

 

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
?>
//code reffrence : https://www.w3schools.com/php/php_mysql_select.asp

 

كما نرى في المثال السابق , كود SQL يجلب بيانات معينة من قاعدة البيانات , لكن بطريقة غير آمنة تماماً وسنرى الآن الطريقة الآمنة والتي لن تختلف كثيراً عن الطريقة السابقة

 

 

<?php
$servername = "localhost";
$username = "username";
$password = "password";

try {
    $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully"; 
    }
catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }

//Connection Done

//Get Some Info

$stmt = $conn -> prepare("SELECT * FROM tabel");
$stmt->execute();
$fetch = $stmt -> fetch();

 

كما نرى هنا , الفرق الوحيد كان عبارة prepare التي تحمينا تماماً من حقن sql , ولهذا السبب نرى الكثير من الاقبال على استخدام هذه الطريقة في التخاطب مع قواعد البيانات بهدف الحماية

أسئلة في موقع نقرة متعلقة حول هذه الثغرة

ما هي حقن sql ?  بواسطة Khaled Mohammed

كيف أحمي موقعي من ثغرة حقن SQL  بواسطة محمد أسدي

 

2- رفع الملفات

من الثغرات الخطيرة أيضاً والمنتشرة بكثرة , تتمثل هذه الثغرة ببساطة برفع ملف الى الخادم الخاص بك ليس من المفترض ان يرفع كملفات php او ما يسمى ب الشل ومن ثم يتصل المخترق بهذا الملف فيتفعل الكود المكتوب فيه وتوثر سلبا في موقعك بطريقة أو بأخرى بحسب نوع الأوامر الموجودة في الملف

كون هذه الثغرة قديمة نسبياً فتم بالفعل ايجاد الكثير من الحلول لها , مع ذلك لا زال الكثير من المبرمجين الشباب يقعون في هذا الخطاً بسبب كثرة الطرق المتوقعة لاستغلالها , فلا يكفي تحديد لاحقة الملف أو حجمه فقط , هناك الكثير من المخاطر الأخرى يجب ان يتم فحصها قبل السماح برفع الملف الى الخادم , والنقطة الأهم هي عدم توضيح مكان رفع الملفات الى المخترق بتلك البساطة لذا لو استطاع المخترق تخطي خطوات الحماية الأولى لن يستطيع ايجاد الملف بسهولة , مما يعطيك وقتاً أكبر في تلافي المشكلة

 

3- برمجة عبر المواقع (XSS)

مجرد التفكير في الأمر يبعث في أنفسنا الذعر , ولفهم الأمر أكثر لنوضح أولاً ماهية هذه الثغرة الخطيرة وكيف يمكننا تجنبها , ببساطة , نخيل عند ارسالك طلب للموقع ليقوم بعمله وليكن على سبيل المثال ادخال بيانات الى قاعدة البيانات , المتوقع من الموقع هو ادخال البيانات حسب ما طلب منه دون أي مشاكل , لكن تكمن المشكلة في ارسال اكواد خبيثة مع هذه البيانات لتعطيل الموقع , فمثلاً يقوم المخترق بعمل جملة شرطية لشرط من المستحيل تحقيقه ك 1 == 0 , وفي حال فشل الشرط ( وهو الأمر المنطقي الوحيد في حالتنا ) يتم تنفيذ كود معين يكتبه المخترق , وتأكد , لن يقوم المخترق بكتابة كود لزيادة أرباح الموقع أو رفع عدد الزيارات .

4- هجمات الحرمان من الخدمات (DDoS)

ليست تماماً ثغرة برمجية ان صح التعبير , مع ذلك تبقى أحد الأمور الخطيرة في أي موقع , بتنوع أنواعها سنحتاج الى وقت مطول للحديث عن هذا النوع من الهجمات , لكن بعموم القول تعتمد هذه الهجمة على توجيه عدد كبير جداً من المستخدمين وبكلمة أصح المخترقين الى موقعك مما يؤدي الى استنزاف موارد الخادم على بيانات غير مهمة وايقاف عمل الموقع مؤقتاً , يمكنك حماية نفسك من هذه الهجمة ببساطة نوعاً ما , يوجد عدة خدمات بعضها مجانية للحماية من هذه المشاكل أهمها CloudFlare

5- سرقة النقرات Clickjacking

سرقة الثغرات هي طريقة ذكية في الواقع , تعتمد فكرتها على تضمين موقعك في موقع يقوم المخترق بانشائه , و شكرا ل CSS التي تساعد بسهولة في اخفاء الاطار وجعل الأمر يبدو وكان موقعك انت مفتوح بدون علم المستخدم , لكنه في واقع الأمر موجود على خادم المخترق وللمخترق صلاحيات تامة في الحصول على جميع المعلومات التي يدخلها المستخدم , طبعا عندما يكتشف المستخدم ان معلوماته تم تسريبها , ستم استدعائك انت الى المحكمة وليس المخترق , في النهاية لقد تمت العملية باستخدام موقعك , اليس كذلك ؟

ان أردت حماية موقعك من هذه الثغرة فكل ما عليك هو منع وضع موقعك في اطارات خارجية كالتالي 

 

Header always append X-Frame-Options SAMEORIGIN

 

عند اضافة هذا السطر الى ملف httpd.conf , او يمكنك استخدام XFram-Options للصفحات المهمة او حتى لكل الموقع

 

في النهاية , نؤكد على ضرورة الحماية وخطورتها , تذكر دائماً ان هناك كم من المخترقين في الخارج مستعدين على دوام الساعة لاسقاط موقعك , هنا يأتي دورك في حماية الموقع واسقاط اهدافهم وحماية مكانتك في السوق الإلكترونية