تبليغاتX
Softwaring

Softwaring

Software Engineering, Process and Management

25 خطای خطرناک در نرم افزار

در وبلاگ آقای مهندس مهرداد مطلب جالبی درج شده بود در مورد تحقیقی صورت گرفته در رابطه با ۲۵ خطای خطرناک و شایع در نرم افزارها که بسیاری از تیم های برنامه سازی مرتکب آن می شوند. خواندن آنرا به همه دوستان نرم افزارچی(!) توصیه می کنم:

The Top 25 Errors are listed below in three categories:
Category: Insecure Interaction Between Components (9 errors)
Category: Risky Resource Management (9 errors)
Category: Porous Defenses (7 errors)

CATEGORY: Insecure Interaction Between Components
CWE-20: Improper Input Validation
CWE-116: Improper Encoding or Escaping of Output
CWE-89: Failure to Preserve SQL Query Structure (aka 'SQL Injection')
CWE-79: Failure to Preserve Web Page Structure (aka 'Cross-site Scripting')
CWE-78: Failure to Preserve OS Command Structure (aka 'OS Command Injection')
CWE-319: Cleartext Transmission of Sensitive Information
CWE-352: Cross-Site Request Forgery (CSRF)
CWE-362: Race Condition
CWE-209: Error Message Information Leak
CATEGORY: Risky Resource Management
CWE-119: Failure to Constrain Operations within the Bounds of a Memory Buffer
CWE-642: External Control of Critical State Data
CWE-73: External Control of File Name or Path
CWE-426: Untrusted Search Path
CWE-94: Failure to Control Generation of Code (aka 'Code Injection')
CWE-494: Download of Code Without Integrity Check
CWE-404: Improper Resource Shutdown or Release
CWE-665: Improper Initialization
CWE-682: Incorrect Calculation
CATEGORY: Porous Defenses
CWE-285: Improper Access Control (Authorization)
CWE-327: Use of a Broken or Risky Cryptographic Algorithm
CWE-259: Hard-Coded Password
CWE-732: Insecure Permission Assignment for Critical Resource
CWE-330: Use of Insufficiently Random Values
CWE-250: Execution with Unnecessary Privileges
CWE-602: Client-Side Enforcement of Server-Side Security

برای مشاهده اصل گزارش اینجا را کلیک کنید.

+ نوشته شده در  پنجشنبه 26 دی1387ساعت 8:27  توسط علی نوبر  | 

SOAP چیست؟

 نمی دانم چرا هر وقت این کلمه به گوش یا چشمم می خورد یاد حمام و پاکیزگی می افتم! اما خب نرم افزار خیلی از مفاهیم را دستخوش تغییر کرده است. جالبتر اینکه پس از جستجوی بسیاری از کلمات در اینترنت که معنی اصلی آنها صدها سال قدمت دارد، اولین یافته ها همانا معانی عجیب و غریب آن کلمات در صنعت محترم نرم افزار است. کاربر بخت برگشته ای را تصور کنید که برای یافتن صابون مورد علاقه خود کلمه Soap را در گوگل جستجو می کند و در دریایی از کلماتی چون XML، Protocol و HTTP غرق می شود!

 SOAP  مخفف Simple Object Access Protocol است. SOAP یک پروتکل مبتنی بر XML است و به منظور انتقال اطلاعات (درخواست و پاسخ) در شبکه ها (خصوصا اینترنت) به کار می رود. به عبارت دیگر SOAP چیزی بیش از یک قرارداد مبتنی بر XML نیست که فرستده و گیرنده باید قالب آنرا رعایت کنند تا بتوانند با یکدیگر تعامل داشته باشند. یکی از ویژگی های اصلی SOAP این است که Firewallها مانع آن نمی شود.

ویژگیهای SOAP:

1.       یک پروتکل ارتباطی است

2.       به منظور تعامل میان برنامه ها و/یا سرویس ها به کار می رود

3.       مستقل از Platform است

4.       مستقل از زبان است

5.       مبتنی بر XML است

6.       ساده و قابل توسعه است

امروزه برنامه ها با استفاده از Remote Procedure Calls (RPC) با یکدیگر تعامل می کنند اما HTTP برای این منظور طراحی نشده است. RPC دارای مشکل سازگاری و امنیت است و Firewall ها و Proxy Server ها عموما این نوع از ارتباط را مسدود می کنند. راه حل بهتر برای این گونه ارتباط، استفاده از بستر HTTP است که توسط طیف وسیعی از سرورها و مرورگرها پشتیبانی می شود. SOAP به منظور ایجاد این گونه ارتباط بروی بستر HTTP به وجود آمده است.

یکی از مهمترین مزایای SOAP استقلال آن از زبان برنامه و Platform است. به این مفهوم که SOAP می تواند پروتکل مشترک ارتباطی میان دو برنامه با زبان های مختلف (مثلا .Net و PHP) و/یا دو Platform متفاوت (مثلا Windows و Linux) باشد.

معایب SOAP:

  • به دلیل طولانی بودن ساختار XML آن، در مواردی که پیام ارسالی طولانی باشد کند عمل می کند.
  • نظر به اینکه سادگی از اصول اولیه SOAP است، این ویژگی منجر به قربانی شدن امنیت و قابلیت اعتماد شده است.
  • به دلیل استفاده SOAP از HTTP، Firewall ای که صرفا برای مرور وب طراحی شده است به سادگی اجازه انتقال HTTP Packets را نمی دهد.

 می خواستم ساختار SOAP را در اینجا نمایش دهم که متوجه شدم بلاگفا این ساختار را به جای نمایش parse می کند و به جای ساختار، خروجی آنرا نمایش می دهد! در صورت علاقه مندی می توانید ساختار آنرا در سایت http://www.w3.org مشاهده کنید.

  

References:

1.      http://www.w3schools.com/soap

2.      http://www.w3.org/TR/2000/NOTE-SOAP-20000508

3.      http://en.wikipedia.org/wiki/Simple_Object_Access_Protocol

4.      http://www.radcom.ir/kb-soap-fa.html

5.      E-Book: Pro WCF: Practical Microsoft SOA Implementation By: Chris Peiris & Dennis Mulder, Apress publication

 

+ نوشته شده در  پنجشنبه 7 آذر1387ساعت 7:24  توسط علی نوبر  | 

بهینه سازی کد (Code Optimization)

حتما با قانون Pareto آشنا هستید، همان قانون 80/20. به نظر میرسد این قانون در مورد Bottleneck های (ترجمه فارسی پیشنهاد شود لطفا!) نرم افزار نیز صدق می کند. بسیار دیده ام که با تغییر بخش کوچکی از کد، کارایی (Performance) نرم افزار به میزان قابل توجهی افزایش پیدا کرده است. سعی می کنم برخی از تجربیات خود را در این زمینه به اشتراک بگذارم. قطعا بیشتر دوستان و همکاران گرامی - که بیشتر آنها نسبت به من از تجربیات بسیار بالاتری برخوردارند – این مطالب را صرفا یادآوری تلقی می کنند. بیشتر مثال ها و نمونه ها به زبان C# و .Net Framework 2.0  خواهد بود.

کار با رشته ها:

کمتر کد نویسی پیدا میشود که با رشته ها کار نکرده باشد. یکی از کاربردهای رایج استفاده از رشته ها چسباندن متوالی رشته ها به یکدیگر است. به عنوان یک صورت مساله فرض کنید که می خواهیم یک فایل Comma Separated Value (CSV) بسازیم و برای این کار باید تعداد زیادی از رشته های کوچک را با فاصل کاما (,) به هم متصل (Concatenate) کرده و در یک فایل بنویسیم.

راه 1: استفاده از System.String

String s1 = “”;

foreach(string s2 in AnArrayOfStrings)

{

      s1 += s2;

}

 

راه 2: استفاده از System.Text.StringBuilder

StringBuilder s1 = new StringBuilder();

foreach(string s2 in AnArrayOfStrings)

{

s1.Append(s2);

}

 

مقایسه راه حل ها: پس از آزمایش راه حل ها به نتایج جالب توجهی خواهید رسید. نتیجه مقایسه دو راه حل برای افزودن 3000 رشته کوچک به یک رشته به شرح زیر است:

استفاده از System.String:    7147 میلی ثانیه

استفاده از System.Text.StringBuilder:    17 میلی ثانیه (!)

 

علت اختلاف زیاد دو راه حل این است که هنگام استفاده از System.String هر مرتبه که یک رشته به رشته ای الحاق می شود، رشته جدیدی (جدید s1) ایجاد می شود و رشته قبلی (s1 قدیمی) رها (Abandon) می شود و اشاره گر خود را از دست می دهد تا Garbage Collector آنرا پاکسازی نماید. شاید بسیاری از برنامه نویسان تعجب کنند که پس از اجرای تکه کد زیر 4 رشته جدید در حافظه به وجود خواهد آمد:

string s;

s = “a”;

s += “b”;

s += “c”;

s += “d”;

+ نوشته شده در  یکشنبه 5 خرداد1387ساعت 16:55  توسط علی نوبر  |