Friday, December 25, 2015

How to expand selected node in treeview C#

When you try to expand selected node in treeview control dynamically, just use the following code:

           // get selected node
            TreeNode parentNode = tvItems.SelectedNode;

           // get top parent node
            while(parentNode.Parent != null)
            {
                parentNode = parentNode.Parent;
            }

           // find node by value path, then expand it
            tvItems.FindNode(parentNode.ValuePath).ExpandAll();



Sunday, July 26, 2015

النقد التقني لنظام التوظيف الخاص بجريدة الرياض http://career.alriyadh.com

تقدم جريدة الرياض نظام التوظيف الذي يساعد الباحثين عن العمل والشركات بقبول وعرض الوظائف بشكل أوتوماتيكي..



1. الشكل الخارجي:
تحتوي الصفحة الرئيسية على لوحة تحكم مميزة تسهل للمتصفح معرفة العناصر الأساسية في النظام مثل الفرص الوظيفية، التسجيل للأفراد والشركات، إحصائيات ... ألخ.

التصميم بسيط ولكن يلاحظ عدم تناسق الألوان في الـ Header و الـ Footer 


أيضاً نجد أن بعض الكتابات غير ظاهرة بشكل صحيح، ولعلها مشكلة بالتصميم المطبق.. كما هو موضح بالصورة التالية:


يوجد مستطيل أبيض، لم يتم الاستفادة منه، وتركه بهذا الشكل غير مناسب:


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


بعض الكتابات لازالت عربية ..
عدم عرض الفرص الوظيفية .. كما هو موجود بالنسخة العربية ..
تداخل بعض النصوص مع الصور ..

2. التقنيات المستخدمة:

تم تطوير الموقع باستخدام ASP.NET كما هو ملاحظ .. ويعتمد الموقع على JavaScript بشكل أساسي لعرض محتوياته -للأسف-.. وهذه المشكلة موجودة في أغلب الأنظمة المطبقة .. حيث نجد الصورة التالية عند تعطيل الـ JavaScript
بعد تعطيل الجافا سكربت، نلاحظ أن الـ IP الخاص بالسيرفر ظهر للمستخدم .. وهذه مشكلة بأمان النظام أيضاً عدا عن كونها خطأ بالتطوير.. 

كما نلاحظ وجود مشكلة بالـ SlideShow الخاص <img src="" alt="" /> .. من المتوقع تعطلعه عن العمل، لكن يجب ألا يظهر الـ HTML الخاص به..

أيضاً نجد مشكلة في بيانات التسجيل .. وذلك لاعتماد ظهورها كلياً على الجافا سكربت ..

3. سهولة التصفح والاستخدام:
يحتوي الموقع على العديد من الروابط التي تسهل عملية التنقل بين جنباته، كما يحتوي على قائمة لعرض الشركات المعلنة للوظائف .. ولكن من الملاحظ أنها غير مفهومة .. حيث توجد فقط شعارات الشركات:



من الملاحظ أيضاً أن الموقع يفتقد إلى دعم المستخدم من خلال تطبيق ToolTip على كل زر أو رابط، وهذا شيء مهم حيث يوفر على المستخدم معرفة مهام كل زر ومعرفة أين سيقوده كل رابط ..

4. التدقيق اللغوي:
قد يكون من الصعب حصر جميع الأخطاء اللغوية بالنظام، أو ضبطها، لوجود عدة أنوع من المستخدمين، صاحب الشركة، وطالب الوظيفة بالإضافة إلى مسؤول النظام .. 

لكن سأقوم بعرض الأخطاء التابعة للنظام كنظام والبعد عن البيانات، entered data

"موقع لعرض الوظائف للمستفيدين من لأفراد والشركات"  ... الأفراد وليس لأفراد.
"إتصل بقسم الوظائف" .. اتصل وليس إتصل
"ادخل رقم الوظيفة" .. أدخل وليس ادخل
"ارشيف الوظائف" .. أرشيف وليس ارشيف
"الاسم الاول" .. الأول وليس الاول
"البريد الالكتروني" .. الإلكتروني وليس الالكتروني

5. الأمان:
يعتبر الأمان في نظام التوظيف الخاص بجريدة الرياض ضعيف للأسباب التالية:

عند تعطيل الجافا سكربت - كما رأينا - يظهر عنوان السيرفر الخاص بالنظام للمستخدم النهائي.. http://46.151.209.69:1010

ملفات النظام الخاصة متاحة للعموم ويمكن تصفحها ومعرفة الإعدادات الخاصة بالنظام:


يبدو أن الشركة المنفذة للنظام وهي cvspro قد نسيت عند نقل النظام إلى بيئة جريدة الرياض من نقل كافة الملفات .. فنجد أن بعض الملفات لازالت تعمل على سيرفرات الشركة:

صفحة مدير النظام متاحة للعموم بمجرد النقل عن طريق الـ URL وذلك لعدم وجود ملف حماية على مستوى الملف:

أخيراً .. يلاحظ أن النظام تم تطويره في مصر ... أو أن المطور مصري الجنسية :)


6. الأداء:
يعتبر الأداء جيد بالنسبة للنظام .. ونلاحظ أن بعض العناصر الغير موجودة في الخادم تعيق أداء أفضل له .. بالإضافة إلى بعض العناصر التي يتم استدعائها من خوادم الشركة المنفذة:

7. نصائح لتطوير الموقع:
الاهتمام أكثر بالجانب الأمني للنظام ... حيث يحتوي على معلومات شركات ومستخدمين..
نقل جميع الملفات الخاصة بالنظام إلى بيئة جريدة الرياض ..
تحسين التصميم بحيث يصبح متناسق مع موقع الجريدة ..

Wednesday, June 17, 2015

النقد التقني لموقع تداول: http://www.tadawul.com.sa

في سلسلة لنقد المواقع الإلكترونية السعودية، سأبدأ بموقع تداول(http://www.tadawul.com.sa/)..
يشمل هذا النقد عدة عناصر منها:
1. الشكل الخارجي.
2. التقنيات المستخدمة.
3. سهولة التصفح والاستخدام.
4. التدقيق اللغوي.
5. الأمان.
6. الأداء.
7. نصائح لتطوير الموقع.

نبدأ على بركة الله ..


1. الشكل الخارجي:
يتميز موقع تداول بالبساطة .. حيث يوفر مجموعة من العناصر المهمة component التي تعرض بالصفحة الرئيسية والتي تهم المتصفح مثل المؤشر العام للسوق، سوق الأسهم، مؤشرات الأسواق ... ألخ..
كما أن تناسق الألوان مريح للعين للتصفح الطويل ..
يحتوي الموقع على عدة روابط يمكن من خلالها التشعب عبر الموقع..

2. التقنيات المستخدمة:
يبدو أن الموقع يعتمد بشكل كبير على الجافا سكربت، حتى بمجرد توقيف الجافا سكربت بالمتصفح يتغير شكل الموقع وتتعطل نسبة كبيرة من أدواته كما هو موضح بالصورة التالية:

نلاحظ تعطل بعض الروابط عن العمل، والشريط الأخضر، بالإضافة لبعض العناصر مثل طباعة الصفحة وغيرها ..

كما نلاحظ تغيير مسمى بعض الروابط إلى أسماء غير مفهومة كما هو موضح بالصورة التالية:


3. سهولة التصفح والاستخدام:
يحتوي الموقع على العديد من الروابط أعلى وأسفل، ويمين ويسار الصفحة مخصصة للتنقل بين جنباته، كما يحتوي على روابط غير مفهومة مثل الروابط التالية:

في القائمة الرئيسية نجد عدم التناسق بالألوان مثلاً عند تمرير المؤشر على كلمة سوق الأسهم، نجد أن الخلفية تتحول إلى زرقاء والكتابة باللون الأبيض، أما عند تمرير المؤشر على كلمة الصكوك والسندات فنجد أن الخلفية لم تتغير إنما لون الخط تغير إلى اللون الأبيض والذي يحجب القراءة تماماً كما هو موضح بالصورة التالية:
عند مربع البحث، في خانة إدخال الرمز يوجد عبارة توجيهية داخل الخانة وهي "أدخل الرمز".. لكن عند الضغط عليها لبدأ الكتابة، نجد أنها لازالت موجودة، فيضطر المستخدم لحذفها ثم إدخال رمز البحث، والمفروض أن تحذف بمجرد الضغط على خانة الإدخال مما يعطي نوع من سهولة الاستخدام:
كما نلاحظ بالجزء السفلي من البحث عبارة "إبحث موقعنا" وهي غير مفهومة! والأنسب أن تكون "البحث في الموقع" .. كما أن لون الخط يجب أن يكون موحد من الجزء الأعلى من البحث ..

يبدو أن القائمة ستطول :) ..

4. التدقيق اللغوي:
يحتوي الموقع على العديد من الأخطاء الإملائية والنحوية على سبيل المثال الكلمات التالية:
الأسهم كتبت الاسهم عدة مرات (بدون همزة) وكتبت الأسهم بالشكل الصحيح أيضاً عدة مرات ..
الاستثمار وليس الإستثمار ..
اتصل بنا وليس إتصل بنا ..
ابحث وليس إبحث ..
الاستعلام وليس الإستعلام ..
الاكتتاب وليس الإكتتاب..
المستثمرين الأجانب الغير مقيمين والعبارة الصحيحة هي المستثمرون الأجانب غير المقيمين..



5. الأمان:
يحتوي الموقع على نسبة كبيرة جدا من الملفات المرفوعة على الخوادم، قد يكون بعضها غير مخصص للعرض أو تكون خطابات بين الشركة المساهمة وموقع تداول ..
أعتذر عن إظهار أي ملف طبقاً لسياسة الخصوصية ..
يحتوي الموقع أيضاً على ملفات نظام قابلة للتعديل والمشاهدة، والتي قد تؤثر على عمل الموقع ..
يحتوي الموقع على صفحات يجب ألا تكون ظاهرة لعموم المتصفحين مثل: اضغط هنا
صفحة البحث يجب أن تكون آمنة أكثر بحيث لايجب أن يقوم بالاتصال بقاعدة البيانات مباشرة قبل التأكد - على الأقل - من أن هناك نص مدخل يجب البحث فيه ..


6. الأداء:
الموقع بطيء نوع ما خاصة الصفحة الرئيسية ويعود ذلك لعدة عوامل منها:
كتابة الجافا سكربت في أعلى الصفحة وهي يجب أن تكون أسفل الصفحة ..
الصور وملفات الجافا سكربت غير مضغوطة .. وبعضها لايتم استدعائها من ذاكرة التخزين المؤقتة..
يوجد عناصر يتم استدعائها من خارج الخادم تؤثر على أداء الموقع مثل العناصر التابعة لـ zedo.com

7. نصائح لتطوير الموقع:
تعديل صيغة الـ HTML واستخدام الـ CSS بشكل صحيح، حيث نجد العديد من الخصائص مطبقة على عناصر الـ HTML بشكل مباشر رغم استخدام الـ CSS
التدقيق الإملائي والنحوي لكامل الموقع.
تعديل الـ CSS والصور والروابط
دعم التصفح بدون جافا سكربت بدون تعطل المهام الأساسية عن العمل ..
حفظ الملفات في قاعدة البيانات بدل من حفظها على الخوادم، والتأكد من خاصية الأمان لكل مجلد يحتوي على ملفات
استخدام الـ Captcha بكل حدث يقول بالاتصال بقاعدة البيانات مباشرة للحد من الهجمات الوهمية.
ضغط ملفات الصور والجافا سكربت مما يتيح تصفح أسرع.
نقل العناصر الخارجية مثل zedo.com إلى الخادم الخاص بموقع تداول.
حذف الروابط الغير هامة الموجودة في HTML والتي تظهر عند عرض مصدر الصفحة..

هذه بعض من الملاحظات للموقع، لاشك يحتاج لعمل كبير ليوازي قيمته كموقع يزوره الآلاف يومياً ..

Thursday, April 16, 2015

SharePoint Error: Error during decryption. Ensure the passphrase is correct

Sometimes, when you try to join another server to SP farm, you get this error:
Error during decryption. Ensure the passphrase is correct

To solve it, do the following:
1. Make sure the passphrase is correct.
2. Stop SharePoint timer job in all nodes.
3. Go to the bath: C:\ProgramData\Microsoft\SharePoint\Config\ 
4. Delete all files.
5. Repeat step 3 and 4 in all nodes.
6. Run the SharePoint timer job in all nodes.
7. Run the configuration wizard again and it will work 

Monday, April 6, 2015

Service Security Tips (2)

In this article, I going to continue talking about service security.

QueryString

Most of services are using QueryString to pass variables throw pages. Those variables maybe encrypted, which gives more security about values, and it maybe passed without encryption.
The best practice when you pass query string to check the following points in the landing page:

1. Make sure you encrypt the value passed. especially when you pass string values.
2. If you pass an ID, for example, check if the current logged in user has permission to see the passed ID or not. Because this ID maybe incremental ID and the user maybe play in the value which, for sure, affect the values to be display in the page.

for example, when user register, the system will redirect him to details page and pass QueryString ID, http://mySite/Details.aspx?UserID=1,  and the details page will load the information related to passed ID. You should prevent user to display information about another user, http://mySite/Details,aspx?UserID=2.


Disable Sensitive Information for Error Messages

Some services has missing configuration, which leads to display sensitive information in error message page like the following:


The above page shows that the service is used Xceed.Chart.GrphicsGL.V4.3.dll which is component should be embedded inside the service and the end user should not know about it,
To fix this issue, you should create custom error page and redirect user to this page if any issue happened.


Directory Browsing

When you create a service and deploy it on server, the service may contains different folder, files, images, styles, scripts ... etc. Some of those files should NOT be brows-able from end user side.
for example, the log file in logs folder which deployed in the root, should not be appeared for end users and if the user type: http://mySite/logs/log.txt the log should not be appeared.
To prevent user to browse the file, you should put web.config file inside the folder, logs for example, and describe which roles are allowed to  browse this file.

To be contiue...

Sunday, April 5, 2015

Service Security Tips (1)

The most important part when you provide a service to your client to make this service secure enough.
It is not related to firewall or access privileges or other network-related issues, it is related to service it self.
In this article, I will provide, based on my SOA study and my development background, some tips to make your service secure enough..

HTML data

Some developer write sensitive information in HTML. For example there maybe shared control between different role, and if the current logged in user in role X, appear the dev X and hide dev Y which is related to role Y.

From the example above, the 'divAdmin' data should appeared for admins only, otherwise hide it.
But we can see the data of 'divAdmin' even if user logged in as 'EndUser' role or any other role by browsing the HTML in browser:




ClickJacking

ClickJacking means providing additional and embedded transportation layer which may transport sensitive information, like username and password or credit card information, to attacker.
This is usually happened when someone access your site through <iframe src="URL"></iframein HTML.
To prevent this lack of security, you should add custom header in your HTTP request by following the following steps:
1. Open web.config
2. Go to <system.webserver> tag
3. Put the following lines:
<httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>

  </httpProtocol>


To be continue ...

Saturday, February 21, 2015

How to prevent ClickJacking in .Net\SharePoint sites

Clickjacking is a trick performed by hackers to get confidential information or to cheat users and force them to perform action which they don’t want to do.
For example, they add a transparent layer on the webpage and user will not see the actual button available.
He/She will click the button to perform certain action but as the hacker has used Clickjacking and added another button above that and will get what He or She wants.
For example, even by clicking a video play button on Facebook, you become a member of certain community or unintentionally like certain page which you don’t want to like.

To prevent ClickJacking in .Net/SharePoint applications, just do the following steps:
1. Open Web.Config file.
2. Under <system.webserver> tag add the following lines:
<httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>
  </httpProtocol>

Invalid HTTP response date time

Sometimes, user can't login using his\her credentials to the site using Chrome and FF, or other browsers they support validation on HTTP response date time.

The issue is HTTP response date time is not equal to VM\Server date time:


To solve this issue there is workaround by following the following steps:
1. Open command.
2. Write net stop http
3. Enter
4. Write net start http
5. Enter
6. iisreset

Try to login, and it will work. BUT it may happen again!

To solve this issue with final\permanent solution you need to configure the expired\incorrect HTTP response header by following the following steps:
1. Open IIS.
2. In Feature View, select HTTP response headers
3. In the Set Common HTTP Response Headers dialog box, select the Expire Web content check box and select one of the following options:
  • Select Immediately if you want content to expire immediately after it is sent in a response.
  • Select After if you want the content to expire periodically. Then, in the corresponding boxes, type an integer and select a time interval at which content expires. For example, type 1 and select Days if you want the content to expire daily.
  • Select On (in Coordinated Universal Time (UTC)) if you want the content to expire on a specific day and at a specific time. Then, in the corresponding boxes, select a date and time at which the content expires
4. Click OK.
5. iisreset.