<?xml version="1.0" encoding="utf-8"?>
	<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>مدونة سلام</title>
		<link>http://www.salamm.com/</link>
		<language>ar-sy</language>
		<description>مدونة سلام ، مدونة شخصية تحوي مواضيع منوعة</description>
		<pubDate>Fri, 22 Feb 2008 11:00:00 GMT</pubDate>
		<generator>Notepad++</generator>
		<managingEditor>salamj@gmail.com</managingEditor>
		<webMaster>salamblog@gmail.com</webMaster>
		
		<item>
			<title>مختصر سريع في أمن المواقع</title>
			<link>http://www.salamm.com/9</link>
			<description>في كل مرة أحاول أن أكتب كتيّب صغير (PDF صغير كما أقصد) أو مجموعة مقالات تتناول موضوع أمن المواقع أتراجع لعدة أسباب ، و لعل أهمها هو أني عندما أكتب موضوعا يتعلق بالبرمجة أختصر أو أكتب بطريقة غير مفهومة لذلك ألغي الفكرة.&lt;br /&gt;
في هذه المرة لن أكتب مقالات ولا كتيّبا ، سأكتفي بسطر يلخص من وجهة نظري أمن المواقع.&lt;br /&gt;
&lt;br /&gt;
&lt;q&gt;لكي تبني موقعا آمنا يجب ألّا تسمح بحصول أمر غير متوقع ، يجب دائما الحصول على القيم الصحيحة أو الممكنة ، لا تسمح بشيء غير مسموح به.&lt;/q&gt;&lt;br /&gt;
&lt;br /&gt;
سأذكر بعض الأمثلة للتوضيح:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt; عندما تحتاج لطلب محتوى ما اعتمادا على رقمه فلا يجب أن يقبل تطبيقك إلا رقما. مثلا طلب مقالة اعتمادا على رقمها الفريد في قاعدة بيانات.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt; عندما يكون المحتوى نص لا يجب أن يقبل تطبيقك إلا النصوص ، لا يجب أن يقبل بوجود HTML أو JavaScript أو أي شيء آخر. مثلا عند نشر مقالة ، تعليق ، ... يجب فلترة المحتوى.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt; الـ URI يجب أن يكون URI ، الصورة يجب أن تكون صورة ، الـ HTTP_REFERER يجب أن يكون HTTP_REFERER ، الـ IP يجب أن يكون IP ... يجب اختبار كل شيء ، استخدام التعابير النظامية Regular Expressions مفيد.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt; عند تضمين ملف يجب أن يكون هو الملف الذي يجب تضمينه، عند السماح برفع ملف للموقع يجب أن يكون نوعه من الملفات المسموحة ، عند حذف شيء يجب أن يتم حذفه هو فقط، عند السماح بـ HTML بشكل محدود يجب الحفاظ على هذه المحدودية&lt;/li&gt;&lt;br /&gt;
&lt;li&gt; ... إلخ&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
هذه بعض الأمثلة ، لا حدود لما يمكن أن يفعله من يريد اختراق موقع ما ، لا يوجد أمان 100%، إخفاء الأخطاء شيء جيد ، فحص كل شيء شيء ضروري ، استخدام اختبارات صارمة ، بعض التعديلات هامة في إعدادات الـ PHP (هنا &lt;a href=&quot;http://aymanh.com/checklist-for-securing-php-configuration&quot; title=&quot;Checklist for Securing PHP Configuration&quot;&gt;قائمة مميزة كتبها أيمن&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
لم أكتب بتفصيل عن كل نوع من أنواع الثغرات ، و لم أكتب عن كيفية سد كل منها لأني كما ذكرت أجد صعوبة في شرح ذلك إلا بأسلوب (فايت ببعضو).&lt;br /&gt;
مطوّر المواقع يجب أن يولي كبير الأهمية للأمان ، فمهما حوى الموقع من مؤثرات بصرية و ألوان مبهرة  و ... ، لن يكون ذلك مهما إذا كان ذلك الموقع معرض للاختراق بسهولة أو بصعوبة متوسطة.&lt;br /&gt;
</description>
			<pubDate>Fri, 08 Aug 2008 11:22:01 +0000</pubDate>
<category>Security</category>
<category>PHP</category>

			<comments>http://www.salamm.com/9#comments</comments>
			<dc:creator>salam</dc:creator>

		</item>
		
		<item>
			<title>أمن المواقع 1</title>
			<link>http://www.salamm.com/9</link>
			<description>تعتمد المواقع الديناميكية على تصرفات الزوار بشكل أساسي في ديناميكيتها ، فإرسال نموذج أو طلب صفحة بواسطة get يلعب الدور الأساسي في محتوى صفحة المعالجة على سبيل المثال طلب صفحة بواسطة الـ get على سبيل المثال لتكن view.php?pid=5 نلاحظ من هذا العنوان أن الصفحة view.php تستخدم القيمة المسندة للبارامتر pid لتعرض محتويات معينة بناءا على قيمته.&lt;br /&gt;
لا يمكن الثقة بزوار مواقعك البعض لديهم هواية اكتشاف ثغرات المواقع و البعض يهوى تخريب أي موقع بغض النظر عن محتواه لإظهار سأحاول في هذا الموضوع القصير أن أشير إلى بعض الاحتياطات الواجب اتخاذها لأمن المواقع بما يندرج تحت اسم input validation.
&lt;br /&gt;
باختصار شديد للفكرة كلها ، يجب عليك أن تراقب أي شيء يرسله زائر سواء عبر post أو get أو cookie أو ...&lt;br /&gt;
&lt;b&gt;مشكلة تفعيل الـ register_globals&lt;/b&gt;&lt;br /&gt;
في بعض نسخ PHP ستجد أن register_globals=on و هذا يعني أن أي بارامتر مرسل يمكن الوصول إليه كمتحول في الصفحة بنفس الاسم، مثلا في المثال السابق سيمكنك أن تصل لقيمة pid بكتابة $pid ، ما المشكلة هنا ؟
المشكلة أن $pid تشير إلى القيمة المسندة لـpid مرسل بواسطة get أو post أو cookie أو غير ذلك.
طيب ، وما المشكلة أيضا أكرر التساؤل ؟!
لنأخذا المثال التالي فهو يوضح الفكرة
&lt;div class=&quot;code&quot;&gt;
if (isAdmin()){
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;$viewOpts = true;
&lt;br /&gt;
}
&lt;/div&gt;
على فرض أن التابع isAdmin يختبر كون الزائر الحالي هو مدير اعتادا على قراءة ملف cookie و لنفرض أنه أعاد قيمة false ماذا سيحدث ؟ حاليا لا شيء فقد اختبر كون المتصفح الحالي مدير و فشل ، لكن ماذا يحدث لو مررنا القيمة viewOpts=true عبر الـURL ( كأسلوب GET ) - أفترض هنا أن register_globals=on افترض أنك فهمت ما أرمي إليه.&lt;br /&gt;
لحل هذه النقطة و باختصار، استخدم $_POST و $_GET و $_COOKIE و $_ENV و $_SERVER للوصول إلى متحولات كل منهم.
&lt;br /&gt;أكمل الموضوع بموضوع لاحق حول اختبار كل نوع و حلول مقترحة &lt;img src=&quot;http://www.salamm.com/images/smiles/39.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; .&lt;br /&gt;
</description>
			<pubDate>Tue, 19 Feb 2008 00:00:00 +0000</pubDate>
<category>Security</category>
<category>PHP</category>

			<comments>http://www.salamm.com/9#comments</comments>
			<dc:creator>salam</dc:creator>

		</item>
		
	</channel>
	</rss>