طريقة لتشفير المتغيرات في الروابط دون استخدام ال rewrite mode كنت قد قمت ببرمجتها قبل سنتين قبل ان اتعرف على طريقة التشفير باستخدام الريرايت مود..
الطريقة بسيطة وتعتمد على خطوتين:
الخطوة الأولى هي القيام بتشفير العنوان عن طريق دالة سنسميها url_encode هذه الدالة تستقبل متغير واحد وهو رابط العنوان الذي سنقوم بتشفيره، وبالدالة نفسها نقوم بتشفير محتوى المتغير، ويكون التشفير كيفما يشاء المبرمج في المثال قمت باستخدام تشفير base64.. واستخدام الدالة في برنامج الموقع يكون عن طريق استدعائها اثناء التنفيذ.. وكتابة المتغيرات التي ستكون في عند الإستدعاء وستعيد الدالة الرابط المشفر...
كود PHP:
function url_encode($var) { //الدالة واستقبال المتغير$var = base64_encode($var); //تشفير محتوى المتغير وحفظه
return $var; // ارجاع قيمة المتغير
}
echo "<a href=\"/index.php?".url_encode("id=10&action=article")."\">العنوان</a>"; //استدعاء الدالة وطباعة المخرجات
الخطوة الثانية وهي ترجمة وفك تشفير الروابط المشفرة عن طريق بضعة اوامر تكون في ملف رئيسي في برنامج الموقع وتكون السطور في بداية البرنامج بحيث ان ما سيتم تنفيذه هو ما سيحدد توجه المستخدم لأي قسم وهو ما سيترجم محتوى المتغيرات في الGET... وذلك يكون بوضع الرابط في متغير وعن طريق الدالة parse_url نقوم بفصل الرابط ووضع خصائصه في مصفوفة ونقوم بحفظ المحتوى بعد ؟ في متغير .. هذا المتغير سيتم فك تشفيره بعد التأكد من ان الصفحة قد تم استدعاؤها عن طريق رابط مشفر لذلك نحفظ نفس المحتوى في رابط اخر.. نقوم باخراج المتغيرات عن طريق الدالة parse_str التي تقوم باستخراج المتغيرات من عنوان GET عادي وتحفظ المتغيرات في مصفوفة.. نقوم بفحص محتوى اي متغير نستخدمه في الصفحة في المثال استخدمت id فان كان المحتوى فارغا فالصفحة مشفرة وان كان غير ذلك فالصفحة قد استدعيت من رابط غير مشفر لذلك نقوم بالتشفير الآلي ويتم النقل لنفس الصفحة بالعنوان المشفر...
بعد فحص الرابط والتأكد من انه مشفر نقوم بفك التشفير وذلك بالتوجه للمتغير الأول الذي كنا قد وضعنا فيه محتوى الرابط المشفر وفك التشفير مجددا عن طريق الدالة base64_decode التي تعيد الرابط الى اصله وهي عكس دالة التشفير التي استخدمناها في هذا المثال اعلاه...
بعد ذلك يتم استخراج محتوى الرابط الذي تم فك تشفيره ونضع كل متغير على حدة بذلك يكون الأمر وكأن الإستدعاء تم مباشرة دون تشفيره... فالتشفير تم فكه والمتغيرات اصبحت وكأنها قد كتبت في سطور البرنامج نفسه.
كود PHP:
$page = $_SERVER["REQUEST_URI"]; // وضع الرابط في متغير
$page =parse_url($page); // هذه الدالة تقوم بفصل الرابط ووضع خصائصه في مصفوفة
$query1 = $page['query']; // نختار من المصفوفة المتغير query وهو كل ما يأتي بعد ال؟ اي جميع المتغيرات في ال get وفي حالتنا هذه متغير واحد مشفر بعد فك تشفيره سيحتوي على جميع المتغيرات التي نحتاجها
$query3 = $page['query']; // بعد ان وضعنا الرابط المشفر في متغير وقبل فك تشفيره نحتاج لأن نتأكد ان الصفحة قد استدعيت من رابط مشفر اصلاً لذلك نضع الرابط المشفر في متغير اخر
parse_str($query3, $output); // نقوم باخراج المتغيرات عن طريق هذه الدالة التي تقوم باستخراج المتغيرات من عنوان GET عادي وتحفظ المتغيرات في مصفوفة
$output = $output['id']; // ونقوم بحفظ اي متغير نستعمله في الصفحة من المصفوفة
if ($output != "") { // نتأكد من انه فارغ فإن كان كذلك فان الصفحة مشفرة لأن عملية الإستخراج للمتغير لم تتم لأن الرابط الأول مشفر اصلا وان كان المتغير له محتوى فان الصفحة قد استدعيت من رابط غير مشفر
$page1 = "index.php?".encode($query3); // ان كانت الصفحة غير مشفرة نقوم بتشفير الرابط
@header("Location: $page1"); // ويتم تحويل المستخدم الى نفس الصفحة بعنوان مشفر
exit();
}
اما الآن وبعد التاكد من ان الصفحة قد استدعيت عن طريق العنوان المشفر يمكن فك التشفير واستخراج المتغيرات
كود PHP:
$query1 = base64_decode($query1); // فك التشفير ووضع المحتوى الغير مشفر في متغير وسيحتوي على : "id=10&action=article" وهو ما قمنا بتشفيره في البداية
parse_str($query1); // ثم نقوم باستخراج المتغيرات الموجودة في رابط من نوع GET بذلك يكون الإستدعاء وكأنه تم مباشرة ولكن بطريقة ملتوية يتم عن طريقها تشفير المحتوى!!
ستكون المتغيرات هكذا:
$id=10;
$action=article;
وتكون النتيجة استخدام المتغيرات بشكل طبيعي وكأنها لم تشفر اصلا... يمكن الإستفادة من هذه الدالة في حال كنت لا تود ان تفضح المتغيرات ولكن دون استخدام الريرايت مود... كان بالنسبة لي وقتها مجرد تحدي وحبيت اشارككم فيه لتعم الفائدة...