• برنامه نویسی امن

    بررسی امنیت یک سامانه نرم‌افزاری در سطوح مختلفی همچون شبکه، سیستم عامل، دیتابیس سرور، وب سرور و برنامه کاربردی می‌تواند صورت بگیرد. سطح برنامه کاربردی، آخرین سطحی است که نفوذگر در صورت گذر از لایه‌های مختلف زیرساخت سخت‌افزاری و نرم‌افزاری با آن مواجه خواهد شد. لذا امنیت سامانه در سطح application از اهمیت خاصی برخوردار است. منابع، چک-لیست، راهنمای کاربری و ابزارهای معتبری در این زمینه وجود دارد که یادگیری و بکارگیری آن‌ها در چرخه حیات نرم‌افزار منجر به افزایش امنیت و قابلیت اطمینان سیستم خواهد شد.

    از منابع معتبری که در شیوه کدنویسی امن استفاده خواهد شد، می‌توان به موارد زیر اشاره کرد:

    CWE-SANS Top 25 Most Dangerous Programming Errors

    OWASP Top 10 Security Vulnerabilities

    PCI Data Security Standard

    NIST SAM

    Secure Coding Best Practices

    برنامه‌نویسی امن

    هر یک از منابع معتبر مذکور، آیتم‌های مهمی را در شیوه برنامه نویسی امن مورد بررسی قرار داده‌اند که با تدوین آن‌ها در قالب یک checklist می‌توان امنیت سورس کد را به صورت رسمی مورد ارزیابی قرار داد. برای تسریع در یادگیری شیوه برنامه‌نویسی امن و همچنین ارزیابی امنیت سورس‌کد توصیه می‌شود از ابزارهای مناسبی استفاده شود. در بخش ابزارهای تست به این امر پرداخته شده است.

    به عنوان نمونه، یکی از مباحث مهم در برنامه‌نویسی بهینه از دیدگاه امنیت و کارایی، مسئله جلوگیری از نشتی حافظه است. در ادامه به تشریح این مسئله می‌پردازیم.

    شناسایی نشتی حافظه

    نشتی حافظه موضوعی است که هم یک مشکل کارایی (به دلیل اتلاف حافظه) و هم یک مشکل امنیتی محسوب می‌گردد (به دلیل مصرف بی‌رویه حافظه که نهایتا منجر به پر‌شدن حافظه و پایین آمدن سرور می‌شود). بررسی این مشکل در برنامه‌نویسی سیستم‌های سطح پایین (تولید شده با زبان‌هایی همچون C و ++C) از اهمیت خاصی برخوردار است چرا که به دلایلی همچون عدم وجود virtual machine در زبان‌های سطح پایین و امکان استفاده مستقیم از اشاره گرها (pointer)، تشخیص این مشکل بسیار پیچیده است. البته مشکل نشتی حافظه در زبان‌های سطح بالایی همچون Java و #C نیز که در یک محیط sandbox اجرا می‌شوند، به دلیل برنامه‌نویسی نامطلوب می‌تواند رخ دهد و لذا برنامه‌نویسان باید دقت کافی در این زمینه را بنمایند.

    لذا برنامه نویسان سامانه‌های نرم‌افزاری در مورد قوانین برنامه‌نویسی مربوط به مدیریت حافظه، باید دانش و آگاهی لازم را داشته باشند. در هر صورت برای تشخیص مشکلات حافظه ابزارهای مناسبی نیز وجود دارد. در زبان‌های سطح بالایی همچون Java و #C معمولا از ابزارهای static analysis و پیکربندی قوانین مربوط به تشخیص نشتی حافظه استفاده می‌شود. این روش برای زبان‌های سطح پایینی همچون C و ++C نیز کاربرد دارد ولیکن برای زیان‌های سطح پایین، روش‌های کاراتری همچون تشخیص نشتی حافظه در حین اجرای برنامه (run-time memory leakage detection) نیز وجود دارد. یکی از ابزارهای قدرتمند در این زمینه ++Parasoft Insure می‌باشد که در بخش ابزارهای تست معرفی شده است. این ابزار از تکنیک instrumentation برای تشخیص نشتی حافظه در حین اجرای برنامه استفاده می‌نماید.


    شرکت مهندس پیشگان آزمون افزار یاس، ابزارهای پیشرفته زیر را در زمینه ارزیابی امنیت سیستم و تست نفوذ در سطح برنامه‌نویسی ارائه می‌دهد:

    Checkmarx،JTest،dotTest،C++Test وSonar.

  • برنامه نویسی بهینه

    در این بخش، شیوه کدنویسی بهینه مورد بررسی قرار می‌گیرد. بهینگی سورس کد عمدتا از دید کارایی و نگهداشت مورد بررسی قرار خواهد گرفت. امنیت سورس کد، به طور خاص در بخش دیگری لحاظ شده است.

    خاص هر یک از زبان‌های برنامه‌نویسی رایج همچون #Java، C و ++C الگوهای برنامه نویسی ویژه‌ای (pattern) وجود دارد که بکارگیری آن‌ها توسط برنامه‌نویسان توصیه شده و همچنین ضد الگوهایی (anti-pattern) وجود دارد که عدم بکارگیری آن‌ها توصیه می‌گردد. برنامه نویسان یک سیستم باید اطلاعات کاملی از این الگوها و اصول برنامه‌نویسی تحت بستر برنامه نویسی مربوطه داشته باشند.

    در بستر جاوا از منابع معتبر زیر برای بررسی شیوه کدنویسی بهینه استفاده خواهد شد:

    Effective Java

    Writing Robust Java Code

    Elements of Java Style

    Code Conventions for Java Programming Language

    برنامه نویسی بهینه

    متناسب با منابع مذکور، check list هایی وجود دارد که آیتم‌های کلیدی مشخص شده در این منابع را در نظر گرفته است. مسئولین فنی تیم‌های برنامه نویسی با استفاده از این چک-لیست ها می توانند اشکالات عمده برنامه نویسی در تیم خود را تشخیص دهند. البته بهتر است کل تیم تولید در این زمینه آموزش ببیند. برای تسریع در یادگیری و خصوصا شناسایی اشکالات (سهوی) برنامه‌نویسی، از ابزارهای مناسب برای مرور و بازبینی کد استفاده می‌شود که در بخش ابزارهای تست مطرح گردیده است.

    برای زبانهای C#، C و ++C نیز منابع معتبری وجود دارند که برخی از آنها عبارتند از:

    #Effective C

    MSDN Guidelines for Efficient .Net Programming

    ++Effective C

    ++MISRA Guidelines for C


    شرکت مهندس پیشگان آزمون افزار یاس، ابزارهای پیشرفته زیر را در زمینه ارزیابی کیفیت برنامه‌نویسی ارائه می‌دهد:

    JTest،dotTest،C++Test وSonar.