الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف نحمي عملنا و المتغيرات المرسلة في عناوين الصفحات

مغلق
بدأه حمدان أبو طعيمة في 11 سبتمبر 2006 · 19 رد · 1,382 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ،

لو نفترض لدينا قاعدة بيانات و صممنا الموقع ليتعامل معها

وفي الصفحة الرئيسية مطالبون ان نضع روابط لصفحات داخلية تستمد محتوياتها من قاعدةا البيانات

* لصفحة الداخلية هي viewtopic.php

* رابط داخلي : viewtopic.php?table=insider&id=20

هذا الرابط سوف سنقلنا لموضوع رقم 20 داخل الجدول insider

--------------

وبهذا يفهم الكل طبيعة عمل الموقع و يمكنه انه يتصور التدرج البرمجي

والسؤال هنا , كيف نتخلص من هذه المعضلة ونمرر البيانات المطلوبة مثل id و الجدول بدون معرفة الزائر وبدون ان يتم عرضها في شريط العنوان

مثال هنا في المنتديات انظروا على هذه الصيغة

/index.php?showtopic=106449

تمررنا لموضوع محدد داخل جدول محدد ولكن المتغير واحد وهو showtopic فاين متغير الجدول ومتغير الايدي

كم تشتكي وتقول انك معدم

والارض ملكك والسما والأنجم

--------------------------

palyesr.gif

شركة بال يس لخدمات الاستضافة والتصميم

www.palyes.com

sales@palyes.com

دائما اونلاين : thesunyangel@hotmail.com

#2

اخى الكريم يمكنك استخدام Post بدل من Get فى ارسال المتغيرات :

<FORM ACTION =”viewtopic.php” METHOD = “GET”>

<FORM ACTIN = “viewtopic.php” METHOD =”POST”>

الفرق بينهم ان POST لاترسل المعلومات في عنوان صفحة الانترنت بطريقه ظاهره ولكن بطريقه مشفره.

#3
اقتباس
الفرق بينهم ان POST لاترسل المعلومات في عنوان صفحة الانترنت بطريقه ظاهره ولكن بطريقه مشفره.

أعتقد أنها لا تشفر إلا باستخدام بورتكول SSL

والفرق أن GET يرسل المتغيرات في العنوان و POST يرسل المتغيرات في جسم الطلب وليس في العنوان .

والحل أن تضع متغيرات GET وسيلة إلى أسماء الحقول

مثلاً لإجراء يخرج لك الموضوع من قاعدة لبيانات ويستخدم id لذلك تسمي id الموضوع في طلب GET بـ showtopic بدل من استخدام متغيرين لذلك (table=insider&id=2)

يعني لا تستخدم إجراءات عامة تأخذ اسم الجدول وid الفعل المناسب هذا يفتح عليك ثغرة .

أيضاً بإمكانك تسمية الجداول ببداية غير معروفة لدى الزائر :

مثلاً جدول اسمه mail فتزيد في اسمه من الأول ox يكون اسمه ox_mail وهذه مستخدمه في كثير من المجلات والمنتديات .

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#4
أبو محمد اللحياني كتب:
مثلاً لإجراء يخرج لك الموضوع من قاعدة لبيانات ويستخدم id لذلك تسمي id الموضوع في طلب GET بـ showtopic بدل من استخدام متغيرين لذلك (table=insider&id=2)

شكرا اخي العزيز ابو محمد ،

ولكن كيف يمكن تمرير اسماء الجداول دون ان تكون في العنوان ،

وحتى لو افترضت كما اقترحت انت ان نضع PREFX فلن يجدي لان المتغير واضح

وايضا ما مدى خطورة GET التي تحتوي على اسماء الجداول ..

وارجو ان تفيدوني في هذا الموضوع

ثم انني استخدمت الوصلات في تمرير هذه المتغيرات مثال

<a href='view.php?table=insider&id=2'>click here</a>

تم تعديل هذه المشاركة بواسطة حمدان أبو طعيمة في 11 سبتمبر 2006 في 22:30

كم تشتكي وتقول انك معدم

والارض ملكك والسما والأنجم

--------------------------

palyesr.gif

شركة بال يس لخدمات الاستضافة والتصميم

www.palyes.com

sales@palyes.com

دائما اونلاين : thesunyangel@hotmail.com

#5

يا أخي المسألة واضحة والله أعلم

يعني لو كتبت لك في العنوان بدل view.php?table=insider&id=2 :

view.php?table=users&id>0 لعله يسبب مشكلة عندك على حسب برمجة الصفحة

والثغرات تأتي بالتجارب على المواقع التي تشكف المتغيرات في العنوان

مثلاً لو عندك متغير do=update , do=view ، أنا أخمن أنك تكتب في لوحة التحكم هذا المتغير do=delete

يعني الموقع لا تخليه مررررررررة مكشوف للناس .

باستطاعك أن تكني عن أسماء الجداول بأسماء أخرى رمزية لا يظن الزائر أن هذا اسم جدول مثلاً s=tp والجدول هو topics

أيضاً بدل كتابة view.php?table=insider&id=2 :

اكتب view.php?insid=2 والبرنامج يفهم أن الجدول المراد هو insider كيف

ضع تعليمة :

if ($_GET['insid']) {
// code select fieldset form insider
}

تستطيع أن تستخدم في موقعك غير الصفحة الرئيسة صفحات أخرى مخصصة بمعالجة الطلبات لجداول خاصة مثلاً

out.php?s=links&id=22 هذه الصفحة تعالج دليل المواقع وأيضاً البنرات s=banners لأنها تشرك في نفس العمل التوجيه صفحة أخرى ، ولو عبث عابث وكتب غير هذين لا يسمح له البرنامج، ولكن ليس بالضرور أن links و banners هي أسماء جداول ، وجتى لو كانت أسماء جداول فالمبرمج يستطيع أن يحمي موقعه ولا يظهر أخطاءه أما العابثين .

أيضاً وسيلة أخرى وهي أني جعلت الزائر يحمل الترخيص رقم واحد وكل جدول وضعت له ترخيصاً يناسبه فجدول المستخدمين يحمل الترخيص رقم 6 وجدول الردود يحمل الترخيص رقم واحد

فالزائر سمحت له بالرد ولكن لو تلاعب وكتب اسم جدول المستخدمين في العنوان فلا يسمح له البرنامج

أيضاً كل مادة علمية تضاف في الموقع لها رقم ترخيص الإفتراضي يكون واحد يعني لكل الزوار ولكن موضوعات خاصة للأعضاء فلا يستطيع الزوار الوصول إليها .

وتستطيع أن تكتب مصفوفات تحمل تراخيص أخرى عل حسب الحقل وعلى حسب الفعل وغيرها وهذه النوع أعتبره قوي من ناحية الحماية .

أرجوا أني أفدتك والله والموفق .

تم تعديل هذه المشاركة بواسطة أبو محمد اللحياني في 13 سبتمبر 2006 في 15:38

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#6

الاخ اللي بينصح باستخدام post ... للاسف لا ينفع استخدامها في حالة الروابط الا اذا كنت مضطر لاستخدام 100 فورم في الصفحة لو هتكتب 100 رابط مثلا ..

اضف الى ذلك ستستبدل الازرار بالجافا سكريبت لكي تجعل اللينك يؤدي عمل الفورم .. الامر مزعج وغير منطق بالمرة ...

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

ما بالك لو ربطت الامر بالاضافة الى ذلك ببعض التشفير و الشفتينج للمتغيرات ...؟؟

اقتباس
ولكن كيف يمكن تمرير اسماء الجداول دون ان تكون في العنوان ،

وحتى لو افترضت كما اقترحت انت ان نضع PREFX فلن يجدي لان المتغير واضح

وايضا ما مدى خطورة GET التي تحتوي على اسماء الجداول ..

اعتقد ان الامر اسهل بكثير اذا كنت تجيد استخدام الدوال .. او بدون استخدامها حتى .. كل العملية هي استبدال قيم المتغيرات المرسلة ونسبها الى متغيرات اخرى هي التي تتعامل مباشرة مع قواعد البيانات ...

الامر ابعد ما يكون عن كونه غير امن ...

#7

شكرا لكم جميعا على هذه الردود النيرة ،

لقد استفدت منكم كثيرً

اقتباس
اعتقد ان الامر اسهل بكثير اذا كنت تجيد استخدام الدوال .. او بدون استخدامها حتى .. كل العملية هي استبدال قيم المتغيرات المرسلة ونسبها الى متغيرات اخرى هي التي تتعامل مباشرة مع قواعد البيانات ...

الامر ابعد ما يكون عن كونه غير امن ...

نعم اخي هذا ما افعله ، انني استخدم الدوال في هذا الموضوع ،

واقتراحك سليم ، ولكن ومع انه ااسماء الجداول ستكون وهمية امام الزائر ، الا انها سوف تحمل الاسماء الحقيقية في داخل برنامجي

ان ما ابحث عنه هو ان يتم تمرير المتغيرات دون ان يتم عرضها في شريط الادرس للزائر وهذا ما يقلقني فعلا

فلماذا لا يتم تمرير المتغيرات مثل متغيرات عناصر الفوورم

وشكرا لافاداتكم

كم تشتكي وتقول انك معدم

والارض ملكك والسما والأنجم

--------------------------

palyesr.gif

شركة بال يس لخدمات الاستضافة والتصميم

www.palyes.com

sales@palyes.com

دائما اونلاين : thesunyangel@hotmail.com

#9

السلام عليكم ،

مرحبا اخي

الموضوع المرسل يتحدث عن curl

واعتقد انه بعيد عما نتحدث عنه هنا

كم تشتكي وتقول انك معدم

والارض ملكك والسما والأنجم

--------------------------

palyesr.gif

شركة بال يس لخدمات الاستضافة والتصميم

www.palyes.com

sales@palyes.com

دائما اونلاين : thesunyangel@hotmail.com

#10

السلام عليكم

ليش ما تسوي مثل كذا

<form action="viewtopic.php" method="post">
<input type="hidden" name="table" value="insider">
<input type="hidden" name="id" value="20">

</form>

طبعاً هذي بتكون مخفيه ما يشوفها الزائر

<input type="hidden" name="table" value="insider">

<input type="hidden" name="id" value="20">

#11

السلام عليكم

اسف لأنني لم استطع قراءة كل الردود (بدها قعدة)

اللي فهمتو اخي لكريم انه عندك قاعدة بيانات وفيها جداول تحتوي على مواضيع وانت ترسل اسم الجدول لمعرفة هذا الموضوع يعود الى اية جدول ويحضره باستخدام ال ID

اقتباس
* رابط داخلي : viewtopic.php?table=insider&id=20

هذا الرابط سوف سنقلنا لموضوع رقم 20 داخل الجدول insider

طبعا هناك عدة طرق لتفادي اظهار اسم الجدول

تستطيع ان تجعل ال ID يظهر بهذا الشكل

id=1_20

بحيث ان 1 هو رقم الجدول والرقم الذي بعد ال _ هو رقم الموضوع ثم على السيرفر تعرف اسم الجدول من خلال الرقم الخاص به

وهذا مثال توضيحي ارجو ان يلبي طلبك

<?
if(isset($_GET['id']))
{
 //هذا سيكون اسم الجدول الافتراضي في حال عدم ارسال رقم الجدول او ان اجدول غير موجود
 $defTableName='insider';

 $id=$_GET['id'];
 $arr=split_id($id);
 $tblID=$arr['tblID'];
 $topicID=$arr['topicID']; 
 //اذا كنت مخزن ارقام واسماء الجداول في قاعدة البيانات
 //هي عبارة عن ال connection link variable
 $tblName=getTableName_from_db($tblID,$hConn);

 //اذا كنت مخزن ارقام واسماء الجداول في مصفرفة
 $tblName=getTableName_from_array($tblID);

 if(!isset($tblName))
	{$tblName=$defTableName;}
	echo "<b>Table Name = $tblName <br> TopicID = $topicID</b>";
}


function getTableName_from_array($tblID)
{
  $tables=array('1'=>'insider','2'=>'maglobe','3'=>'falafel');
  if(isset($tables[$tblID] )) return $tables[$tblID];
  return null;
}

function getTableName_from_db($tblID,$hConn)
{$ret_value=null;
 $hRes=mysql_query("select tableName from `tables` where tablID=".strval($tblID),$hConn);
 if($hRes)
   {$rec=mysql_fetch_array($hRes);	
	$ret_value=$rec['tableName'];}
 return $ret_value;
}

function split_id($id)
{$ret_value=array('tblID'=>'1','topicID');
 $separator='_';
 $seppos=strpos($id,$separator);
 if($seppos>-1)
	{
	 $ret_value['tblID']=val(substr($id,0,$seppos));
	 $ret_value['topicID']=val(substr($id,$seppos+1));
	}
 else{$ret_value['topicID']=val($id);}
 return $ret_value;
}
function val($str)
{if(is_numeric($str))return $str;
 return 0;
}

?>

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#12

السلام عليكم ،

شكرا

لكي اخي وعزيزي Mo7eb_AlrasooL

وانا قد فهمت ما انت تقصده جيدا ، ولكن اعتقد انه يتعارض نوعا ما عما انا اعمل عليه ،

وعلى اية حال ارى ان اسناد اسماء الجداول لارقام امر يسهل على اي شخص تخمين الجداول بسهولة .

بالنهاية انا قد ارتئيت ان يتم اسناد قيم الجداول والايدي داخل فورم في hidden TEXT

ومع استخدام POST

سوف يكون الارسال مخفي على الاقل عن اعين الزوار العاديين

وشكرا لكم جميعا

كم تشتكي وتقول انك معدم

والارض ملكك والسما والأنجم

--------------------------

palyesr.gif

شركة بال يس لخدمات الاستضافة والتصميم

www.palyes.com

sales@palyes.com

دائما اونلاين : thesunyangel@hotmail.com

#13

السلام عليكم

حياك لله اخي الكريم

اقتباس
وعلى اية حال ارى ان اسناد اسماء الجداول لارقام امر يسهل على اي شخص تخمين الجداول بسهولة

اذا ما بدك تفصل نينهم بعلامة _ تستطيع عمل التالي

1120

بحيث ان هذا الرقم يقسم الى ثلاثة اقسام

القسم الأول وهو أول رقم 1 وهذا يدل على عدد خانات رقم الجدول

الرقم الثاني يكون رقم الجدول وهو هنا يكون رقم 1 اي خانة واحدة

الرقم الثالث يكون باقي الرقم اي 20 وهو رقم الموضوع

2152559
يقسم هكذا
2 15 2559
2  = عدد خانات رقم الجدول
15 = رقم الجدول اي خانتان بعد اول رقم
559= رقم الموضوع

314078990
يقسم هكذا
3 140 78990
3   = عدد خانات رقم الجدول
140 = رقم الجدول اي خانتان بعد اول رقم
78990= رقم الموضوع

او اذا بدك مثلا بتقسمه الى قسمين اول قسم مكون من رقمين او ثلاثة حسب عدد الجداول عندك وبعدها يكون رقم الموضوع او ... هناك عدة طرق لطلبك

طبعا انت من يقرر ماذا ستستخدم

اذا اعتمدت طريقة عمل فورم لكل رابط ! فانصحك بعمل function مثلا سمه printLink

function printLink(title,tblName,topicID)

طبعا بتعمله زي ما بدك وبداخله الكود الخاص بطباعة الفورم

حتا اذا اردت في المستقبل تغيير الطريقة فقط تعدل على هذه الميثود

والله أعلم

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#14

السلام عليكم ،

عزيزي Mo7eb_Alrasool شكرا لردك ولشرحك الوافي

اعتقد ان ما قصدته يتيح امامي كمبرمج عدة خيارات وحسب تفكيري الخاص وهذا شيء جميل

وتفكير سليم منكـ

وانا فعلا استخدم فنكشن للروابط المهم جدا فقط ،

اما الاعتياديات فاكتي فقط بتمرير المتغيرات واستخدم الشروط للتحقق من ذلك،

شكرا لك اخي العزيز

كم تشتكي وتقول انك معدم

والارض ملكك والسما والأنجم

--------------------------

palyesr.gif

شركة بال يس لخدمات الاستضافة والتصميم

www.palyes.com

sales@palyes.com

دائما اونلاين : thesunyangel@hotmail.com

#15
حمدان أبو طعيمة كتب:
السلام عليكم ،

مرحبا اخي

الموضوع المرسل يتحدث عن curl

واعتقد انه بعيد عما نتحدث عنه هنا

إنها صلب الموضوع تماما سواء كنت تعمل على داتابيز أو فورم!
#16

انا استخدم سيرفر محلي و php5

ما فهمته انه هذه الدالة بحاجة الى ملفات يتم نسخها الى دليل ويندوز system

php4ts.dll, ssleay32.dll, php_curl.dll, msvcrt.dll

ساحاول ان افهم هذه الدالة جيدا ،

وسأعووود

كم تشتكي وتقول انك معدم

والارض ملكك والسما والأنجم

--------------------------

palyesr.gif

شركة بال يس لخدمات الاستضافة والتصميم

www.palyes.com

sales@palyes.com

دائما اونلاين : thesunyangel@hotmail.com

#17
حمدان أبو طعيمة كتب:
انا استخدم سيرفر محلي و php5

ما فهمته انه هذه الدالة بحاجة الى ملفات يتم نسخها الى دليل ويندوز system

php4ts.dll, ssleay32.dll, php_curl.dll, msvcrt.dll

ساحاول ان افهم هذه الدالة جيدا ،

وسأعووود

من أول php4.3 فلن تحتاج إلى تضمين أى شئ (h)

وبما أنك تعمل على php5 فلا تشغل نفسك بقرائة المتطلبات لأنها مرفقه فعلا، فقط انظر للكود وشرحه

#18

شكرا عزيزي انور

لقد جربت مثال كان معروضا في موقع زند على الرابط السابق منكـ انت

وظهر هذا الخطأ

Fatal error: Call to undefined function curl_init() in C:\AppServ\www\edit\asd.php on line 7

كم تشتكي وتقول انك معدم

والارض ملكك والسما والأنجم

--------------------------

palyesr.gif

شركة بال يس لخدمات الاستضافة والتصميم

www.palyes.com

sales@palyes.com

دائما اونلاين : thesunyangel@hotmail.com

#19

السلام عليكم

اولا ل عام وانتم بألف خير

اضف هذاالسطر

dl("php_curl.dll");

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#20

مرحبا

يظهر هذا الخطأ

Warning: dl() [function.dl]: Not supported in multithreaded Web servers - use extension=php_curl.dll in your php.ini in C:\AppServ\www\edit\curll.php on line 3

Fatal error: Call to undefined function curl_init() in C:\AppServ\www\edit\curll.php on line 5

تم تعديل هذه المشاركة بواسطة حمدان أبو طعيمة في 26 سبتمبر 2006 في 02:31

كم تشتكي وتقول انك معدم

والارض ملكك والسما والأنجم

--------------------------

palyesr.gif

شركة بال يس لخدمات الاستضافة والتصميم

www.palyes.com

sales@palyes.com

دائما اونلاين : thesunyangel@hotmail.com

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…