موفق ان شاء الله
موفق ان شاء الله
axalb
ان شاء الله اخى واتمنى انك تكون استفد
العاطفي
الشكر لله يا اخى
العندليب
الاستاذ الكبير شرف ليا زيارة الموضوع وان شاء الله نتعمل منك فى الامن
موودي
الف شكر اخى ودا شرف ليا التثبيت وارجو من الجميع الاستفادة وقريبا باقى الردوس
Developer
شكرا اخى على مرورك الكريم وياريت تجيب وصلة الموضوع لتكامل الموضوع
زاهي الشوق
الله يبارك فيك اخى
جزاك الله خير على الدرس الراائع ..
كل الشكر والتقدير ..
__________________
استخدم خاصية تنبيه المشرفين للضرورة وعند ملاحظة موضوع يخالف قوانين منتديات سوالف وسيتم مراجعة الموضوع او المشاركة المبلغ عنها على الفور
مشكور اخى مجاهد
اكمل بارك الله فيك نريد منطقة التسجيل والاعضاء
__________________
سبحان الله وبحمده .. سبحان الله العظيم
I Love PHP
I Love Swalif
شكرا لكل من ساعدني:)
السلام عليكم ورحمة الله وبركاته
كتبت رد طويل وعلق المتصفح :anger2:
حابدأ أتكلم عن الأمن في السكربتات التي عملت
create_topic.php
add_topic.php
main_forum.php
view_topic.php
add_answer.php
وحقسم كلامي لردود وإن شاء الله نقدر نوصل المعلومه البرمجيه.
سأبدأ بالسكربت التالي:
add_topic.php
هذه السكربت يستقبل متغيرات من المشارك وهي كالتالي:
$topic
$detail
$name
الخوف من هذه المتغيرات إذا أرسل المشارك علامات حساسه مثل علامة التنصيص " أو علامة التنصيص المفرده ' او علامة الـ NULL أو علامة السلاش / .
هذه العلامات الحساسه لها تأثير داخل جمل الـ SQL وعن طريقها تكتشف ثغرات الـ SQL Injection .
لنرى جملة الـ SQL في السكربت وهي كالتالي:
لاحظ المتغيرات التي يرسلها المشارك في الجمله ستجدها محوطه بعلامة 'كود PHP:
$sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";
$result=mysql_query($sql);
فإذا قام المشارك بوضعها في المتغيرات السابقه فسوف يؤدي هذا الى ظهور خطأ في جملة الـ SQL وبعدها يبدأ المشارك ( المخترق المخرب ) بإستثمار هذا الخطأ لعمل شيء ما يريده كالتعديل في موضوع اخر لا يخصه او حذف موضوع شخص اخر ......... الخ
ولكن هناك نقطه يجب توضيحها
قام مطوروا الـ php بوضع خاصيه داخل الـ php تسمى magic_quotes وهذه الخاصيه تقوم بأخذ المتغيرات والبحث عن العلامات الحساسه وتعطيلها بعلامة الـ / بحيث تصبح علامة التنصيص المفرده في مثالنا بعد إرسالها بالشكل التالي /'
ولكن ماذا لو كانت هذه الخاصيه معطله داخل الـ php من قبل المستضيف مالذي سوف يحدث في مثالنا ؟؟
سيحدث خطأ طبعاً لذلك يجب تأمين المتغيرات المرسله في حالة كانت هذه الخاصيه معطله .
وتأمينها يتم بالكوود التالي:
هذا الكود يقوم بفحص خاصية magic_quotes فإذا كانت معطله قام بحماية المتغيرات المرسله في هذا السكربت من العلامات الحساسه.كود PHP:
if (!get_magic_quotes_gpc()){
$topic = addslashes($topic);
$detail = addslashes($detail);
$name = addslashes($name);
$email = addslashes($email);
}
هذا الكوود يتم وضعه في بداية السكربت.
يتبع ...
بعد أن إنتهينا من سكربت add_topic.php سنبدأ بسكربت add_answer.php
سكربت add_answer.php يستقبل المتغيرات التاليه من المشارك :
$id
$a_name
$a_email
$a_answer
هناك أكثر من جملة SQL داخل السكربت وهي كالتالي:
كود PHP:
// Find highest answer number.
$sql="SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE question_id='$id'";
$result=mysql_query($sql);
كود PHP:
// Insert answer
$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')";
$result2=mysql_query($sql2);
وجميع جمل الـ SQL في السكربت تحتوي على المتغيرات المرسله وتمت إحاطتها بالعلامه الحساسه ' وهذا للتأكد من أن طريقة كتابة الجمله كان صحيح.كود PHP:
$tbl_name2="forum_question";
$sql3="UPDATE $tbl_name2 SET reply='$Max_id' WHERE id='$id'";
$result3=mysql_query($sql3);
ونفس الكلام الذي ذكرناه في الرد السابق بخصوص العلامات الحساسه سنكرره هنا لذلك سيتم إضافة الكوود التالي لتأمين هذه المتغيرات:
ويتم إضافة هذا الكوود في اول السكربت add_answer.phpكود PHP:
if (!get_magic_quotes_gpc()){
$id = addslashes($id);
$a_name = addslashes($a_name);
$a_email = addslashes($a_email);
$a_answer = addslashes($a_answer);
}
يجب الملاحظه لو أن المبرمج نسي أن يحمي أحد المتغيرات السابقه في السكربت الأول والثاني فهنا يقع الخطأ الذي يستغله الهكرز وتصبح ثغره.
لذلك القاعده البرمجيه الأمنيه تقول ليس كل خطأ برمجي ثغره ولكن كل ثغره خطأ برمجي .
يتبع..
بعد أن انتهينا من سكربتات الإرسال يأتي دور سكربتات عرض المعلومات الا وهي :
main_forum.php
view_topic.php
سأبدا بسكربت
main_forum.php
هذا السكربت يقوم بالإستعلام من قاعدة البيانات عن معلومات معينه وبعد ذلك يقوم بعرض هذه المعلومات على المتصفح الخاص بالزائر بصيغة html ومن المعلوم عن رموز الـ html تبدأ بعلامة أصغر من > وتنتهي بعلامة أكبر من < والذي بداخلها يسمى بالوسم.
فإذا قام المشارك بإرسال موضوع وكان أحد المتغيرات يحمل النص التالي:
فسوف يتم تنفيذ جافا سكربت في متصفح الزائر وهذا خطأ في طريقة عرض السكربت لهذا المتغير أدت إلى حدوث ذلك وهذه هي طريقة الثغرات التي تسمى XSS .كود HTML:<script>alert('أهلا بكم');</script>
لذلك الحل هو تحويل علامات الأكبر من والأصغر من الى رموز نصيه تسمى htmlentity وهي تتم في لغة الـ php بدالة htmlspecialchars .
ولتأمين المتغيرات في هذا السكربت إبحث عن
واستبدله بالتالي:كود PHP:
<tr>
<td bgcolor="#FFFFFF"><? echo $rows['id']; ?></td>
<td bgcolor="#FFFFFF"><a href="view_topic.php?id=<? echo $rows['id']; ?>"><? echo $rows['topic']; ?></a><BR></td>
يتبع..كود PHP:
<tr>
<td bgcolor="#FFFFFF"><? echo htmlspecialchars($rows['id']); ?></td>
<td bgcolor="#FFFFFF"><a href="view_topic.php?id=<? echo htmlspecialchars($rows['id']); ?>"><? echo htmlspecialchars($rows['topic']); ?></a><BR></td>
بعد أن انتهينا من سكربت main_forum.php سنبدأ بسكربت view_topic.php
ونفس الكلام الذي ذكرناه بخصوص طريقة العرض في السكربت السابق موجوده في سكربت view_topic.php
لتأمين المتغيرات في هذا السكربت إبحث عن:
إستبدله بالتالي:كود PHP:
<tr>
<td bgcolor="#F8F7F1"><strong><? echo $rows['topic']; ?></strong></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"><? echo $rows['detail']; ?></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"><strong>By :</strong> <? echo $rows['name']; ?> <strong>Email : </strong><? echo $rows['email'];?></td>
</tr>
ابحث عن التالي أيضاً:كود PHP:
<tr>
<td bgcolor="#F8F7F1"><strong><? echo htmlspecialchars($rows['topic']); ?></strong></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"><? echo htmlspecialchars($rows['detail']); ?></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"><strong>By :</strong> <? echo htmlspecialchars($rows['name']); ?> <strong>Email : </strong><? echo htmlspecialchars($rows['email']);?></td>
</tr>
استبدله بالاتي:كود PHP:
<tr>
<td width="18%" bgcolor="#F8F7F1"><strong>Name</strong></td>
<td width="5%" bgcolor="#F8F7F1">:</td>
<td width="77%" bgcolor="#F8F7F1"><? echo $rows['a_name']; ?></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"><strong>Email</strong></td>
<td bgcolor="#F8F7F1">:</td>
<td bgcolor="#F8F7F1"><? echo $rows['a_email']; ?></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"><strong>Answer</strong></td>
<td bgcolor="#F8F7F1">:</td>
<td bgcolor="#F8F7F1"><? echo $rows['a_answer']; ?></td>
</tr>
كود PHP:
<tr>
<td width="18%" bgcolor="#F8F7F1"><strong>Name</strong></td>
<td width="5%" bgcolor="#F8F7F1">:</td>
<td width="77%" bgcolor="#F8F7F1"><? echo htmlspecialchars($rows['a_name']); ?></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"><strong>Email</strong></td>
<td bgcolor="#F8F7F1">:</td>
<td bgcolor="#F8F7F1"><? echo htmlspecialchars($rows['a_email']); ?></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"><strong>Answer</strong></td>
<td bgcolor="#F8F7F1">:</td>
<td bgcolor="#F8F7F1"><? echo htmlspecialchars($rows['a_answer']); ?></td>
</tr>
ابحث عن التالي:
استبدله بالتالي:كود PHP:
<td><input name="id" type="hidden" value="<? echo $id; ?>"></td>
كود PHP:
<td><input name="id" type="hidden" value="<? echo htmlspecialchars($id); ?>"></td>
انتهى
ما شاء الل اخى ما شاء الله بجد احنا كدا ممكن نعمل فريق لبرمجة منتدى عربى يتحدى كل الشركات
فأنا اول من ينضم
واستاى العندليب ثانى من انضم الى الفريق
اين انتم يا مبرمجى العرب لمرة واحدة نتحد حتى نصل الى شىء
نتحدث نتناقش حتى نصل ال اعلى مستوى من الجدية والعمل
المشاركة الأصلية كتبت بواسطة Mr.eslam
أكمل أنا معك متابع
لا تسأل عن أحد وخلينا في المهم
تسجيل حضور
__________________
al3ndaleeb[@]uk2.net
اخى عندليب اتمنى ان اكون لا اخيب ظنك بى واتمنى ان ترى منى ما هو جديد
ودعنا ننطلق
نكمل ما بدأناه
اليوم تعرف طريقة استرجاع باسورد عضو عند نسيه كلمة المرور هذا بحث php من خلاله تستطيع
تعليم كيقية ارسال كلمة السر للاعضاء عن طريق عنوان البرسد الالكترونى اذا نسوا كلمة السر
مارك جاكسن أحد أعضاءنا لَكنَّه نَسى كلمةَ سره للإتَّصالِ بالموقع. نحن سَنُرسلُه كلمةَ سر إلى عنوان بريده الإلكتروني.
في هذا البحثِ يَنشئ ملفَ وقاعدةَ بيانات
1. نسيت _ كلمة سر forgot_password.php
2.ارسل كلمة السر send_password_ac.php
قاعدة البيانات
1. الأعضاء . members
Syntax
1/ انشاء قاعدة بيانات الاعضاء Create table "members"كود:$email_to=$_POST['email_to']; "SELECT password FROM table_name WHERE email='$email_to'";
هذة قاعدة بياناتنا وهذا كلمة السر الخاصية بمارك"951412" وهذا بريده الالكترونى"mark@phpeaststep.com"
الكود
* يَستبدلُ البريد إلكتروني 1, 2 , 3 بعنوان بريدكَ الإلكتروني للإختباركود:CREATE TABLE `members` ( `id` int(4) NOT NULL auto_increment, `name` varchar(65) NOT NULL default '', `lastname` varchar(65) NOT NULL default '', `email` varchar(65) NOT NULL default '', `password` varchar(65) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; -- -- Dumping data for table `test_mysql` -- INSERT INTO `members` VALUES (1, 'Billly', 'Blueton', 'email_1@somewhere.com', '789789'); INSERT INTO `members` VALUES (2, 'Jame', 'Campbell', 'email_2@somewhere.com', '654123ddf'); INSERT INTO `members` VALUES (3, 'Mark', 'Jackson', 'email_4@somewhere.com', '951412dwe');
2/نسيت كلمة السر forgot_password.php
انشىء اختيار يجيب عليه حتى بتم ارسال له كلمة السر فمثلا اليربد الالكترونى
3/ ارسال كلمة السرsend_password_ac.phpكود:<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"> <tr> <form name="form1" method="post" action="send_password_ac.php"> <td width="25%"><strong>Enter your email : </strong></td> <td width="75%"><input name="email_to" type="text" id="mail_to" size="25"> <input type="submit" name="Submit" value="Submit"> </td> </form> </tr> </table>
ما العمل؟
1. بعد ان تلقى الشخص جوابا بان كلمة السر سوف ترسل اليه الشكلَ الى بريده الالكترونى
2 . فى ارسال كلمة السر send_password_ac.php نحن يَجِبُ أَنْ نَجِدَ هذا عنوان البريد الإلكتروني في قاعدةِ بياناتنا.
3. إذا وَجدَ هذا البريد الإلكتروني في قاعدةِ بياناتنا يَعطي كلمةَ سر إلى الاسمِ المتغيّرِ "$ _ كلمة سركَ "ويُرسلُ هذه المتغيّرِ الى البريد الإلكتروني الموجود .
4. إنْ لمْ يُوْجَدُ هذا البريد الإلكتروني في قاعدةِ البيانات، رسالة عروضِ "غير موجود بريدكَ الإلكتروني في قاعدةِ بياناتنا"
اسف لستخدامى اسم اجنبى لان هذا ما موجود فى الصوركود:<? $host="localhost"; // Host name $username=""; // Mysql username $password=""; // Mysql password $db_name=""; // Database name //Connect to server and select databse. mysql_connect("$host", "$username", "$password")or die("cannot connect to server"); mysql_select_db("$db_name")or die("cannot select DB"); // value sent from form $email_to=$_POST['email_to']; // table name $tbl_name=members; // retrieve password from table where e-mail = $email_to(mark@phpeasystep.com) $sql="SELECT password FROM $tbl_name WHERE email='$email_to'"; $result=mysql_query($sql); // if found this e-mail address, row must be 1 row // keep value in variable name "$count" $count=mysql_num_rows($result); // compare if $count =1 row or not if($count==1){ $rows=mysql_fetch_array($result); // keep password in $your_password $your_password=$rows['password']; // ---------------- SEND MAIL FORM ---------------- // send e-mail to ... $to=$email_to; // Your subject $subject="Your password here"; // From $header="from: your name <your email>"; // Your message $messages= "Your password for login to our website \r\n"; $messages.="Your password is $your_password \r\n"; $messages.="more message... \r\n"; // send email $sentmail = mail($to,$subject,$messages,$header); } // if $count not equal 1 else { echo "Not found your email in our database"; } // if your email succesfully sent if($sentmail){ echo "Your Password Has Been Sent To Your Email Address."; } else { echo "Cannot send password to your e-mail address"; } ?>
درس مفيد جدا جدا
بالتوفيق انشاء الله .,..
مرحباً اخي Mr.eslam
الصراحة موضوع حول جداً بل مميز
لي كذا اقتراح
الأول انشاء ملف sconfig.php
يحتوي على بينات الاتصال بالقاعدة
ويتم استدعائه من قبل ملف global.php
الذي يقوم بدوره بعمل اتصال بالقاعدة وينفذ الاوامر المرسلة له
ويغلق الاتصال
بكذا بترتاح من تكرار المتغيرات
ولا تنسى تفرغها
وانا من المتابعين اول بأول
وإذا ما تمكنت من عمل الي ذكرته لك
انا ممكن اسويه لك
لكن واضح عليك ما شاء الله باشا
__________________
http://www.vb2plus.com/index.php?action=news&id=12
أقوى نظام بنرات عرفته المنتديات
السلام عليكم
ممتاز جداً ، ووفقك الله
اود ان اشارك ولو بشي بسيط
تشفير كلمة المرور في قاعدة البيانات ،
تشفير الباسويرد عن طريق الدالة MD5 وهي احد دوال التشفير وبكل تاكيد الكل يعرفها
،،، طبعا سوف يتم تخزين كلمة المرور في قاعدة البيانات مشفرة
واتمنى قبول مقترحي هذا ،،،،
(ملاحظة: مستعد ان ابرمج لك كود ملف الـlogin و كود ملف register )
بس في بالي سؤال ، ماهي التقنية التي تود استخدامها بالنسبة للانترفيس اي هل تريد برمجة نظام قوالب خاص ام تريد ان تستخدم نظام قوالب موجود !!!
ولك ألف تحيه ، وسوف اعود مجددا
__________________
################################ PHP.SD ########
We're not first,But We're the BEST
##