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

shabake-mag.jpg

برای مطالعه بخش قبل روی این آدرس کلیک کنید. 

برنامه‌های کاربردی با بردارهای حمله دیگری نیز روبرو هستند که برای آزمون سکیوریتی پلاس باید در مورد آن‌ها اطلاع داشته باشید. از مهم‌ترین آن‌ها به موارد زیر باید اشاره کرد:

  •   شرایط مسابقه (Race conditions): یک مسئله برنامه‌نویسی نرم‌افزاری است که در آن کد اجرا شده توسط یک ریسمان (ریسمان (Thread) یک واحد کار) باید با ترتیب خاصی تکمیل شود تا ریسمانی دیگر بتواند همان کار را اجرا کند. به عنوان مثال، فرض کنید سه مرحله برای یک اقدام سپرده‌گذاری در یک حساب بانکی وجود دارد: (1) خواندن موجودی حساب، (2) اضافه کردن مبلغ در حال واریز، (3) ذخیره مبلغ موجودی جدید به موجودی حساب. اگر دو ریسمان یا پردازش منطق را اجرا کنند، فرض می‌کنیم که هر مرحله به ترتیب قبل از اجرای منطق توسط رشته بعدی تکمیل شده است. در غیر این صورت، موجودی حساب نادرست خواهد بود. به عنوان مثال، فرض کنید 100 دلار در حساب بانکی وجود دارد. اگر منطق نامرتب اجرا شود (شرایط مسابقه)، در این حالت ریسمان 1 موجودی حساب (100 دلار) را می‌خواند و فرض می‌کند ریسمان 2 نیز موجودی حساب (100 دلار) را خوانده و سپس هر ریسمان 50 دلار اضافه می‌کند و ارزش کسب شده را پس‌انداز می‌کند. در نهایت به جای 200 دلار مورد نظر، تنها 150 دلار موجودی باقی خواهد ماند. مشکل فوق به این دلیل است که یک شرط مسابقه رخ داده است، که در آن ما نیاز داریم که هر ریسمان هر سه مرحله را قبل از اینکه ریسمان یا پردازه بعدی بتواند همان منطق را اجرا کند، اجرا شود. این به عنوان باگ نرم‌افزار زمان بررسی/زمان استفاده (TOCTOU) شناخته می‌شود و برای رفع آن باید کد شی در دسترسی را بررسی کرد تا اطمینان حاصل شود که قبلاً به آن دسترسی پیدا نکرده است، سپس زمان استفاده از شی را به حداقل برسانید و دوباره آن‌را آزاد کنید تا سایر کدها بتوانند به آن دسترسی داشته باشند.
  •  حمله بازپخشی (Replay attack): حمله بازپخشی  یا حمله مجدد جلسه زمانی است که مهاجم ترافیک قربانی را رهگیری می‌کند و می‌تواند شناسه جلسه او را از آن ترافیک بگیرد. سپس مهاجم می‌تواند ترافیک را مجدداً به هدف ارسال کند و اساساً هویت قربانی را جعل کند زیرا مهاجم شناسه جلسه را دارد.
  •  حملات رابط برنامه‌نویسی کاربردی (Application programming interface ): توابع API، توسط برنامه‌نویس ایجاد می‌شوند و نوعی عملکرد را ارائه می‌دهند. حمله API زمانی است که یک هکر سعی می‌کند از آن API برای اهداف مخرب استفاده کند، معمولاً با فراخوانی توابع و انجام حملات تزریقی روی آن توابع.
  •  فرسودگی منابع (Resource exhaustion): نیروی انسانی ناکافی برای انجام درست کار نوعی آسیب‌پذیری است. به عنوان مثال، نداشتن برنامه‌نویس کافی ممکن است منجر به نادیده گرفتن کارهای مهم مثل اعتبارسنجی ورودی‌ها شود. به‌طور مشابه، برنامه‌نویسانی که بیش از حد کار می‌کنند، بیشتر مستعد خطا هستند.
  •    آسیب‌پذیری حافظه/بافر (Memory/buffer vulnerability ): تعدادی آسیب‌پذیری حافظه یا آسیب‌پذیری بافر وجود دارد که باید از آن‌ها آگاه باشید:
  •    نشت حافظه (Memory leak):  نشت حافظه زمانی اتفاق می‌افتد که یک برنامه حافظه را برای پردازش‌های دیگر آزاد نمی‌کند تا پس از اتمام کار از حافظه استفاده کنند. اگر هر برنامه پس از اتمام کارش حافظه را نگه دارد، حافظه سیستم به سرعت از دست می‌رود.
  •    سرریز اعداد صحیح (Integer overflow): وقتی داده‌ها در حافظه ذخیره می‌شوند، بلوکی از حافظه با اندازه خاصی به آن اختصاص داده می‌شود. خطای سرریز عدد صحیح زمانی رخ می‌دهد که یک بلوک از حافظه برای ذخیره یک مقدار صحیح ایجاد شده باشد، اما نتیجه عملیات حسابی از حداکثر اندازه نوع عدد صحیح تخصیص داده شده بیشتر باشد. مشخص شده است که این برنامه پاسخ‌های غیرمنتظره‌ای برای مقابله با سرریز اعداد صحیح دارد، بنابراین یک مشکل امنیتی به وجود می‌آید.
  •    سرریز بافر (Buffer overflow): سرریز بافر زمانی اتفاق می‌افتد که نرم‌افزار در قسمت‌هایی از حافظه که اطلاعاتی را می‌نویسد که ارتباطی با برنامه کاربردی ندارد.
  •     اشاره گر/اشیاء اشاره گر (Pointer/object dereference): ابزاری است که برنامه‌نویسان برای اشاره به یک ناحیه از حافظه از آن استفاده می‌کنند. هنگامی که یک برنامه‌نویس می‌خواهد محتویات حافظه را بخواند، اشاره‌گر را حذف می‌کند. از نقطه نظر امنیتی، مطمئن شوید که اجرای کدهای غیرقابل اعتماد یا تزریق شده را مسدود کرده‌اید تا هکرها نتوانند این قسمت‌های حافظه را بخوانند.

علت بروز مشکل رخنه‌ها در نرم‌افزارها چیست؟

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

  • پیکربندی پیش‌فرض (Default configuration): هنگام نصب نرم‌افزار یا سیستم‌ها، مطمئن شوید که پیکربندی پیش‌فرض را تا حد امکان تغییر دهید. هکرها تنظیمات پیش‌فرض محصولات را می‌شناسند و یاد می‌گیرند که چگونه از تنظیمات پیش‌فرض برای سوءاستفاده از سیستم‌ها استفاده کنند. شما باید پیش‌فرض‌ها را تغییر دهید تا هکرها شانس کمتری برای نفوذ به برنامه‌ها داشته باشند.
  • پیکربندی نادرست/پیکربندی ضعیف (Misconfiguration/weak configuration): بخش عمده‌ای از حمله‌های هکری به‌دلیل پیکربندی نادرست یا اشتباه سیستم عامل و برنامه‌های کاربردی انجام می‌شوند. در ارتباط با نرم‌افزارهای بزرگی مثل SQL Server، Exchange Server و نمونه‌های مشابه باید اطمینان حاصل کنید که پیکربندی درستی را اعمال کرده‌اید.
  • مدیریت نادرست خطا (Improper error handling): مدیریت خطا یکی دیگر از وظایف کلیدی برنامه‌نویسان است. برنامه‌نویسان باید اطمینان حاصل کنند که هرگونه خطای تولید شده در برنامه را به دام می‌اندازد و آن خطاها را به‌طور مناسب مدیریت می‌کنند تا برنامه با مشکل جدی روبرو نشود. علاوه براین، هنگامی که کدنوسی نرم‌افزار به پایان رسید، باید به‌دنبال شناسایی خطا باشید. مدیریت نادرست خطا می‌تواند منجر به سوء‌استفاده از برنامه شود.
  • پیاده‌سازی‌های رمز ضعیف Weak cipher: متاسفانه برخی از برنامه‌هایی که توسط کاربران سیستم عامل ویندوز و اندروید استفاده می‌شود از فناوری‌ها یا پروتکل‌های رمزگذاری ضعیف استفاده می‌کنند. به‌طور ‌مثال، در برخی برنامه‌ها و سفت‌افزارها برای رمزگذاری داده‌ها از الگوریتم متقارن DES یا 3DES استفاده می‌شود. این رمزگذاری ضعیف است و باید با الگوریتم‌های قوی‌تری مثل AES جایگزین شود. مثال دیگر جایگزینی پروتکل‌های رمزگذاری ضعیف‌تر مثل TLS 1.0 و TLS 1.1 با نمونه جدیدتر TLS 1.3 است.
  • تهدیدات روز صفر (New threats/zero day): یکی از شایع‌ترین آسیب‌پذیری‌هایی که بسیاری از شرکت‌ها را قربانی می‌کند، تهدید روز صفر است که اشاره به آسیب‌پذیری ناشناخته‌ای دارد که فروشنده هنوز از آن آگاه نیست، یا به تازگی از آن آگاه شده است. در آسیب‌پذیری روز صفر، زمان کافی برای عرضه وصله وجود ندارد و در نتیجه هکرها می‌توانند در فرصت کوتاهی از آن استفاده کنند. بهترین راه مقابله با این حمله، به‌کارگیری سامانه‌های تشخیص و پیشگیری از نفوذ است.
  • مدیریت نامناسب ورودی (Improper input handling): مدیریت و ارزیابی ورودی یکی دیگر از وظایف مهم برنامه‌نویسان و توسعه‌دهندگان نرم‌افزار است. هر زمان که داده‌ها به یک برنامه ارسال می‌شوند، برنامه‌نویس باید آن داده‌ها را اعتبارسنجی کند و از مناسب بودن آن‌ها اطمینان حاصل کند. در این حالت، اگر داده‌ها نامعتبر باشند، به‌جای پردازش اطلاعات، یک خطا به کاربر نمایش داده می‌شود. اگر برنامه‌نویس ورودی را تایید نکند، هکرها می‌توانند داده‌های مخرب را به برنامه تزریق کنند تا نرم‌افزار را به روشی که مطلوب نیست کنترل کنند.

مفاهیم مهم توسعه ایمن برنامه‌‌‌های کاربردی

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

مفاهیم کدنویسی امن

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

مدل‌های چرخه زندگی توسعه

چرخه عمر توسعه نرم‌افزار (SDLC) مراحل اصلی توسعه یک برنامه کاربردی را مشخص می‌کند. چرخه عمر توسعه نرم‌افزار شش مرحله دارد:

■   جمع‌آوری و تجزیه و تحلیل نیازمندی‌ها: مرحله اول شامل جمع‌آوری الزامات برای برنامه است.

■   طراحی: پس از جمع‌آوری الزامات، سپس روی طراحی برنامه بر اساس الزامات کار می‌کنید.

■   پیاده‌سازی (کدگذاری) :مرحله پیاده‌سازی به عنوان مرحله کدگذاری نیز شناخته می‌شود. در این مرحله، کد برنامه را می نویسید.

■   آزمایش: پس از مرحله کدگذاری، باید کد را آزمایش کنید تا تأیید کنید که آنچه را که باید انجام می‌دهد.

■   استقرار: پس از آزمایش، آماده نصب (استقرار) برنامه در سیستم یا سیستم‌هایی هستید که باید برنامه را داشته باشند.

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

مدل‌های چرخه عمر توسعه نرم‌افزار متفاوتی وجود دارد که می‌توان از بین آن:ها گزینه مناسب را انتخاب کرد. دو مدل از محبوب‌ترین مدل‌های آبشار و مدل چابک هستند. آن‌ها مراحل یکسانی دارند اما در نحوه حرکت شما از یک فاز به فاز دیگر متفاوت هستند:

  •    Waterfall: با مدل آبشاری (waterfall)، در هر مرحله از SDLC بدون این‌که در هر زمان بخواهید به صورت مرحله‌ای به عقب برگردید، پیشرفت می‌کنید. نکته این است که شما باید مطمئن شوید که هر فاز را به طور کامل تکمیل کنید تا نیازی به بازگشت نباشد (که در زمان ایجاد این مدل هزینه بر بود).
  •    Agile: با مدل چابک، اگر متوجه شدید چیزی از قلم افتاده است یا باید دوباره کار شود، می‌توانید رویکرد تکراری‌تری داشته باشید و به مرحله قبلی بروید. به عنوان مثال، می‌توانید برخی از نیازمندی‌ها را جمع‌آوری کنید، طراحی انجام دهید و سپس یک نمونه اولیه را برای مشتری پیاده‌سازی کنید تا بررسی شود. سپس، بر اساس بازخورد مشتری، ممکن است مجبور شوید چند مرحله اول را مجدداً بررسی کنید تا جمع‌آوری نیازمندی‌ها و طراحی برنامه را تکمیل کنید. در طول آزمایش، ممکن است متوجه شوید که باید طرح را تغییر دهید یا کد را تغییر دهید.

محیط‌های کاربردی

بسیار مهم است که نرم‌افزار جدید ایجاد شده خود را از طریق تعداد زیادی آزمایش اجرا کنید تا مطمئن شوید که نرم‌افزار بر اساس مفاهیم برنامه‌نویسی ایمن توسعه یافته است. این بدان معنی است که برنامه در طول عمر خود در مراحل یا محیط‌های مختلف حرکت می‌کند. ترتیب محیط‌هایی که برنامه در آن‌ها اجرا می‌شود به شرح زیر است:

  1. توسعه (Development): محیط توسعه جایی است که برنامه ایجاد می‌شود و برای رفع خطاهای برنامه اشکال‌زدایی می‌شود.
  2. تست (Test): پس از توسعه برنامه، باید در یک محیط آزمایشی مستقر شود که دارای تمام عناصر ضروری مانند سرور پایگاه داده آزمایشی است تا برنامه هنگام اجرا در این محیط از آن استفاده کند.
  3. مرحله‌بندی (Staging): پس از آزمایش، برنامه به یک فاز مرحله‌بندی منتقل می‌شود، که به محیط تولیدی که می‌توانید دریافت کنید نزدیک است (آن را به عنوان یک محیط شبیه‌سازی در نظر بگیرید). این اساساً آخرین محیط آزمایشی قبل از آن است که برنامه به شکل عمومی منتشر شود.
  4.  تولید (Production): هنگامی که برنامه در همه محیط‌ها، از جمله محیط مرحله‌بندی آزمایش شد، می‌توانید برنامه را در محیط کاربردی مستقر کنید - به این معنی که برنامه آماده استفاده است!
  5.  تضمین کیفیت (Quality assurance): محیط تضمین کیفیت (QA) برای آزمایش اینکه برنامه مطابق با انتظارات مشتری آماده شده استفاده می‌شود. محیط تضمین کیفیت جایی است که تمام تست‌های QA در آن انجام می شود.

برای آزمون سکیوریتی پلاس باید ترتیب استقرار در محیط‌‌های کاربردی را به خاطر بسپارید.

کنترل نسخه و مدیریت تغییر (Version Control and Change Management)

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

مدیریت تغییر فرآیندی است که باید برای اجرای تغییرات دنبال کنید. اکثر شرکت‌ها یک سیاست مدیریت تغییر دارند که نحوه انجام تغییرات را مشخص می‌کند. فرآیند مدیریت تغییر معمولاً شامل برنامه‌ریزی برای تغییر، آزمایش تغییر، اعمال تغییر و سپس تأیید تغییر است. مدیریت تغییر همچنین شامل یک فرآیند تأیید مدیریت تغییر است، جایی که قبل از اجرای یک تغییر باید مورد تأیید قرار گیرد.

Provisioning and Deprovisioning

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

Deprovisioning یک سیستم فرآیندی است که شما برای حذف سیستم از محیط برنامه انجام می‌دهید. هنگام حذف یک برنامه یا سیستم، ابتدا باید کنترل دسترسی را تغییر دهید تا مطمئن شوید کاربران به سیستم یا برنامه دسترسی ندارند. توجه به این نکته مهم است که اگر سیستم‌ها یا برنامه‌های کاربردی قدیمی را از شبکه حذف نکنید شبکه را در برابر حمله‌ها آسیب‌پذیر می‌کنند.

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

اندازه‌گیری یکپارچگی (Integrity Measurement)

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

تکنیک‌های کدنویسی امن

دو بخش مهم در توسعه کد ایمن، نوشتن روال‌های خوب رسیدگی به استثنا و اعتبارسنجی تمام داده‌های ارسال شده به برنامه است.

مدیریت صحیح خطاها

هنگامی‌که توسعه‌دهندگان برنامه یک برنامه را ایجاد می‌کنند، گاهی اوقات خطاهایی را که می‌توانند در شرایط‌های مختلف به وجود بیاید و پیش‌بینی نشده‌اند را شناسایی می‌کنند.

خطاهای زمان اجرا شایع‌ترین نوع خطای برنامه‌های کاربردی هستند، زیرا توسعه‌دهنده نمی‌تواند خطایی که ممکن است در زمان اجرا به وجود بیاید را پیش‌بینی کند. بنابراین باید کدها را به گونه‌ای بنویسید که اگر خطایی رخ داد، بلوکی در برنامه کاربردی توانایی به دام انداختن آن‌را داشته باشد. به دام انداختن یک خطا به این معنی است که به جای اینکه خطا در واقع اتفاق بیفتد، برنامه‌نویس خطا را رهگیری کرده و یک پیام هشدار دوستانه نمایش می‌دهد یا به نوعی اقدام اصلاحی انجام می‌دهد، به جای اینکه برنامه از کار بیفتد (خطاهای زمان اجرا باعث از کار افتادن برنامه می‌شود).

رسیدگی به استثناها روش پیشرفته‌تری برای رسیدگی به خطا است. Exception یک اصطلاح فانتزی برای خطای زمان اجرا است و برنامه‌نویسانی مانند توسعه‌دهندگان دات‌نت یا جاوا کدهای کنترل استثنا را پیاده سازی می‌کنند. کد رسیدگی به استثنا از چیزی استفاده می‌کند که بلوک try/catch نامیده می‌شود، که به معنای «این کد را امتحان کنید و هر گونه خطا را پیدا کنید». کد زیر نمونه‌ای از بلوک try/catch است:

اعتبار سنجی ورودی مناسب

توسعه‌دهندگان باید به این نکته دقت کنند که وقتی شخصی اطلاعاتی را در برنامه‌ای وارد می‌کند و روی دکمه‌ای مانند Save، Find یا Execute کلیک می‌کند، توسعه‌دهنده باید ورودی را قبل از استفاده از آن در جایی در برنامه تأیید کند. اعتبار سنجی ورودی به این معنی است که توسعه‌دهنده بررسی می‌کند که اطلاعات تایپ شده توسط کاربر در برنامه برای نوع ورودی مورد انتظار مناسب باشد. هر ورودی که از آزمون اعتبار سنجی عبور نکند باید کنار گذاشته شود و پردازش نشود.

برای آزمون سکیوریتی پلاس به یاد داشته باشید که برنامه‌های کاربردی قبل از پردازش هرگونه داده‌ای ابتدا باید مکانیزم اعتبارسنجی ورودی را انجام دهند. بدون شک در آزمون سکیورتی پلاس پرسشی در ارتباط با اعتبار سنجی ورودی مشاهده خواهید کرد!

به عنوان مثال، در صفحه ورود به یک برنامه، کاربر باید نام کاربری و رمز عبور را تایپ کند. نام کاربری و رمز عبور اکثراً کلمات کوتاهی هستند که کمتر از 14 کاراکتر هستند. برنامه‌نویس باید این ورودی را آزمایش کند و مطمئن شود که نام کاربری بیش از 14 کاراکتر و رمز عبور بیش از 14 کاراکتر نباشد. همچنین، گذرواژه‌ها فضای خالی ندارند، بنابراین برنامه‌نویس باید بررسی کند که آیا از یک فاصله به‌عنوان یکی از کاراکترها استفاده می‌شود یا خیر - و اگر چنین است، باید پردازش اطلاعات را لغو کند زیرا ممکن است مخرب باشد. نمونه‌های دیگری از کاراکترهایی که باید به آن‌ها توجه کرد خط تیره و آپستروف هستند. آن‌ها معمولاً در رمزهای عبور استفاده نمی‌شوند، اما هکرها آن‌ها را در صفحه ورود به سیستم وارد می‌کنند تا نحوه اجرای نرم‌افزار را دستکاری کنند.

رویه‌های ذخیره شده

رویه‌های ذخیره شده اشیایی هستند که در پایگاه داده ایجاد می‌شوند که کد SQL مورد نیاز برای انجام اقداماتی مانند درج یک رکورد، حذف یک رکورد و به روز رسانی یک رکورد را کپسوله می‌کنند. این کد می‌تواند مستقیماً در یک برنامه کاربری (برنامه وب، برنامه تلفن همراه یا برنامه دسکتاپ) نوشته شود، اما قرار دادن منطق پایگاه داده در یک رویه ذخیره شده مزایای زیادی دارد:

  •    عملکرد: اگر کد پایگاه داده را در برنامه کلاینت دارید، وقتی برنامه اجرا می‌شود، باید کد را به سرور ارسال کند، که سپس کد را تجزیه، بهینه‌سازی، کامپایل و اجرا می‌کند. با یک رویه ذخیره شده، تجزیه، بهینه‌سازی و کامپایل تنها با اولین بار فراخوانی رویه ذخیره شده انجام می‌شود. فراخوانی‌های آینده فقط نسخه کامپایل شده ذخیره شده رویه را که قبلا فراخوانی شده اجرا می‌کنند.
  •    قابلیت نگهداری: اگر کد SQL را به جای هر برنامه نرم‌افزاری در یک رویه ذخیره شده قرار دهید، یک مکان مرکزی برای به‌روز‌رسانی منطق پایگاه داده دارید. هنگامی که منطق نیاز به تغییر دارد، کد SQL را در رویه ذخیره شده تغییر می‌دهید و همه برنامه‌هایی که رویه ذخیره شده را فراخوانی می‌کنند، کد به روز شده را اجرا می‌کنند.
  •    امنیت: یک رویه ذخیره‌شده می‌تواند به جلوگیری از حملات تزریق SQL هنگام استفاده از پارامترها و آماده‌سازی رویه ذخیره‌شده کمک کند (به این معنی که قبل از اولین استفاده از قبل کامپایل شده است). مزیت این است که چون رویه ذخیره شده از قبل کامپایل شده است، اگر هکر بخواهد یک دستور SQL را به پارامتر تزریق کند، یک خطا دریافت می‌کند زیرا رویه ذخیره شده قبلاً کامپایل شده است، بنابراین کد درج شده به عنوان پارامتر پذیرفته نمی‌شود.

 

برای مطالعه بخش بعد اینجا کلیک کنید. 

برای مطالعه تمام قسمت‌های آموزش سکیوریتی پلاس اینجا کلیک کنید.


تبلیغات لینکی: 

سایت استخدام

ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را می‌توانید از کتابخانه‌های عمومی سراسر کشور و نیز از دکه‌های روزنامه‌فروشی تهیه نمائید.

ثبت اشتراک نسخه کاغذی ماهنامه شبکه     
ثبت اشتراک نسخه آنلاین

 

کتاب الکترونیک +Network راهنمای شبکه‌ها

  • برای دانلود تنها کتاب کامل ترجمه فارسی +Network  اینجا  کلیک کنید.

کتاب الکترونیک دوره مقدماتی آموزش پایتون

  • اگر قصد یادگیری برنامه‌نویسی را دارید ولی هیچ پیش‌زمینه‌ای ندارید اینجا کلیک کنید.

ایسوس

نظر شما چیست؟