امنیت برنامههای کاربردی وب
امنیت برنامههای کاربردی وب به آسیبپذیریهای خاص نرمافزارهای وب میپردازد — تزریق (injection)، اسکریپتنویسی بینسایتی (cross-site scripting)، احراز هویت شکسته (broken authentication)، و نقصهای کنترل دسترسی — که از جمله رایجترین و تأثیرگذارترین آسیبپذیریها در سیستمهای مدرن هستند.
Definition
امنیت برنامههای کاربردی وب، عمل محافظت از نرمافزارهای مبتنی بر وب و کاربران آنها در برابر حملاتی است که از نحوه مدیریت ورودی، نشستها، احراز هویت، و کنترل دسترسی توسط برنامه، و همچنین ضعفهای مدل امنیتی مرورگر سوءاستفاده میکنند.
Scope
این موضوع مدل تهدید برنامههای کاربردی وب (کلاینت نامعتبر، شبکه خصمانه، سرورهای چندمستأجره) و دستههای آسیبپذیری مشخص آن را پوشش میدهد: تزریق (SQL و دستور)، اسکریپتنویسی بینسایتی، جعل درخواست بینسایتی (cross-site request forgery)، کنترل دسترسی و احراز هویت شکسته، و سریالزدایی ناامن. همچنین مدل امنیتی مرورگر (سیاست مبدأ یکسان، سیاست امنیت محتوا) و دفاعیات استاندارد را در بر میگیرد. این موضوع شامل بهرهبرداری از حافظه در سطح پایین و فرآیند کلی توسعه امن که در موضوعات مرتبط دیگر بررسی میشوند، نمیشود.
Core questions
- چرا ترکیب ورودی نامعتبر با کد یا کوئریها آسیبپذیریهای تزریق را ایجاد میکند؟
- چگونه اسکریپتنویسی بینسایتی و جعل درخواست بینسایتی به کاربران یک سایت حمله میکنند؟
- چگونه سیاست مبدأ یکسان مرورگر، آنچه را که کد وب میتواند انجام دهد، محدود میکند؟
- چگونه احراز هویت، نشستها، و کنترل دسترسی معمولاً در برنامههای وب شکسته میشوند؟
- چه دفاعیات استانداردی از رایجترین آسیبپذیریهای وب جلوگیری میکنند؟
Key concepts
- تزریق SQL و دستور
- اسکریپتنویسی بینسایتی (XSS)
- جعل درخواست بینسایتی (CSRF)
- کنترل دسترسی شکسته
- احراز هویت و مدیریت نشست شکسته
- سیاست مبدأ یکسان
- سیاست امنیت محتوا
- کوئریهای پارامتری
- OWASP Top Ten
Key theories
- تزریق و سردرگمی کد/داده
- نقصهای تزریق (تزریق SQL، تزریق دستور) زمانی ایجاد میشوند که ورودی نامعتبر به عنوان کد تفسیر شود؛ دفاع در برابر آن، جدا نگه داشتن داده و کد است، عمدتاً از طریق کوئریهای پارامتری و رمزگذاری دقیق خروجی.
- مدل امنیتی مرورگر و حملات سمت کلاینت
- سیاست مبدأ یکسان محتوا را از مبدأهای مختلف جدا میکند، اما اسکریپتنویسی بینسایتی اسکریپت مهاجم را به یک صفحه مورد اعتماد تزریق میکند و جعل درخواست بینسایتی از نشست احراز هویت شده کاربر سوءاستفاده میکند؛ دفاعیات شامل رمزگذاری خروجی، سیاست امنیت محتوا، و توکنهای ضد CSRF است.
Mechanisms
تزریق SQL زمانی رخ میدهد که ورودی کاربر به یک کوئری الحاق شود و به مهاجم اجازه دهد منطق آن را تغییر دهد؛ کوئریهای پارامتری با اتصال ورودی به عنوان داده، این مشکل را برطرف میکنند. اسکریپتنویسی بینسایتی اسکریپت را به صفحهای تزریق میکند که مرورگرهای سایر کاربران آن را اجرا میکنند، که با رمزگذاری خروجی آگاه از متن و سیاست امنیت محتوا کاهش مییابد. جعل درخواست بینسایتی یک مرورگر احراز هویت شده را فریب میدهد تا درخواستهای ناخواسته ارسال کند، که با توکنهای ضد CSRF و کوکیهای SameSite محافظت میشود. نقصهای کنترل دسترسی زمانی ایجاد میشوند که سرور در هر درخواست، مجوز را بررسی نکند.
Clinical relevance
آسیبپذیریهای برنامههای کاربردی وب بسیاری از بزرگترین نقضهای داده را ایجاد میکنند: تزریق SQL و کنترل دسترسی شکسته میلیاردها رکورد را افشا کردهاند، و اسکریپتنویسی بینسایتی به طور معمول حسابهای کاربری را به خطر میاندازد. از آنجا که تقریباً تمام خدمات دارای رابط وب هستند، امنیت وب مستقیماً بر تجارت الکترونیک، بانکداری، پورتالهای مراقبتهای بهداشتی، و سیستمهای دولتی تأثیر میگذارد، و مبنای تست نفوذ، برنامههای پاداش باگ، و رژیمهای انطباق مانند PCI-DSS است.
Evidence & guidelines
OWASP Top Ten مرجع بالفعل برای خطرات رایج وب است که با OWASP Application Security Verification Standard (ASVS) و برگههای تقلب (cheat sheets) تکمیل میشود. دفاعیات اعمال شده توسط مرورگر (سیاست امنیت محتوا، کوکیهای SameSite، یکپارچگی زیرمنبع) توسط W3C و WHATWG استانداردسازی شدهاند. چارچوبهای انطباق مانند PCI-DSS کنترلهای امنیتی وب را برای سیستمهایی که دادههای پرداخت را مدیریت میکنند، الزامی میکنند.
History
امنیت برنامههای کاربردی وب با وب پویا در اواخر دهه 1990 و 2000 رشد کرد، زیرا پایگاههای داده و ورودی کاربر باعث ایجاد نقصهای تزریق و اسکریپتنویسی شدند. OWASP Top Ten (اولین بار در سال 2003 منتشر شد) آگاهی از حیاتیترین خطرات را استانداردسازی کرد. دفاعیات سمت مرورگر از طریق سیاست مبدأ یکسان و سپس سیاست امنیت محتوا تکامل یافتند، در حالی که نقضهای مهم به طور مکرر هزینه واقعی تزریق SQL و کنترل دسترسی شکسته را نشان دادند.
Key figures
- Dafydd Stuttard
- Ross Anderson
- Jeremiah Grossman
- Michal Zalewski
Related topics
Seminal works
- stuttard2011
- owasp2021
- anderson2020
Frequently asked questions
- مؤثرترین دفاع در برابر تزریق SQL چیست؟
- استفاده از کوئریهای پارامتری (عبارات آماده)، که ساختار SQL و مقادیر ارائه شده توسط کاربر را به طور جداگانه ارسال میکنند تا ورودی هرگز به عنوان بخشی از کوئری تفسیر نشود. این کار کد و داده را متمایز نگه میدارد و کلاس حمله را خنثی میکند.
- اسکریپتنویسی بینسایتی چه تفاوتی با تزریق SQL دارد؟
- هر دو از ورودی نامعتبر ناشی میشوند، اما تزریق SQL پایگاه داده سرور را هدف قرار میدهد، در حالی که اسکریپتنویسی بینسایتی اسکریپت مخرب را تزریق میکند که در مرورگرهای سایر کاربران در داخل سایت مورد اعتماد اجرا میشود. SQLi دادههای سرور را سرقت یا تغییر میدهد؛ XSS نشستها و اقدامات کاربر را ربوده و کنترل میکند.