اخبار داخلی آرمان داده پویان

مقالات

بررسی پروتکل HTTP از دیدگاه امنیتی (قسمت دوم)

بررسی پروتکل HTTP از دیدگاه امنیتی

قسمت دوم

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

پاسخ‌های HTTP

در سمت سرور ، سرور HTTP که بر روی پورت ۸۰ در حال گوش دادن است، بعد از دریافت درخواست کاربر، پاسخش را می‌دهد. حال به بررسی ساختار پاسخ HTPP یا همان HTTP responce می‌پردازیم. یک پاسخ HTTP از بخش‌های زیر تشکیل شده است:

  • خط آغازین پاسخ که به آن خط وضعیت یا Status line نیز گفته می‌شود.
  • خط سرآیند
  • یک خط خالی
  • بدنه پیام

خط وضعیت (status line): اولین خط در پاسخ HTTP می‌باشد.  خط وضعیت از سه بخش تشکیل می‌شود: نسخه HTTP، کد وضعیت پاسخ HTTP و معمولا یک عبارت که در حقیقت توضیحی در ارتباط با کد وضعیت می‌باشد. برای درک این موضوع به جدول زیر نگاه بیندازید. در این جدول کدهای HTTP که بیشتر در تست‌های نفوذ وب مورد بررسی قرار می‌گیرد، به همراه معانی آن‌ها آمده است. مثلا در سطر اول کد ۲۰۰ را مشاهده می‌نمایید این کد یعنی همه چیز درست می‌باشد و مشکلی وجود ندارد.

کدهای وضعیت HTTP شرح
۲۰۰ OK نشان می دهد که درخواست موفقیت آمیز بوده است.
۳۰۱ Moved Permanently نشان می دهد که منبع درخواست شده به طور دائم در درون عنوان پاسخ موقعیت مکانی به URL منتقل شده است.
۳۰۲ Found (Temporary Redirect) نشان می دهد که منبع درخواست شده به طور دائم در زیر عنوان پاسخ موقعیت مکانی به URL منتقل شده است.
۴۰۰ Bad Request نشان می دهد که سرور نتوانسته است درخواست ارسال شده توسط مشتری را بفهمد ، معمولاً به دلیل نحو نامعتبر است.
۴۰۱ Unauthorized اعلام می کند که درخواست به دلیل تأیید صحت کافی نمی تواند ارائه شود.
۴۰۳ Forbidden نشان می دهد که سرور درخواست را درک کرده است اما از مجاز بودن آن امتناع می ورزد.
۴۰۴ Not Found نشان می دهد که سرور نمی تواند منبع درخواست شده را پیدا کند.
۴۰۵ Method Not Allowed نشان می دهد که روش درخواست توسط سرور شناخته شده است، اما استفاده از این منبع مجاز نیست.
۵۰۰ Internal Server Error نشان می دهد که سرور با شرایط غیر منتظره ای روبرو شده است که مانع از اجرای آن می شود.

در جدول بعدی نیز می‌توانید گروه‌بندی‌های مربوط به این کدها را مشاهده نمایید:

وضعیت کدگروه‌ها شرح
۱xx Informational
۲xx Success
۳xx Redirection
۴xx Client error
۵xx Server error

با دانستن جداول بالا، تحلیل خوبی از پاسخ‌های HTTP می‌توانید داشته باشید، به طور مثال زمانی که کد پاسخ با ۵ شروع می‌شود، یعنی با خطای سرور مواجه هستیم. در ادامه در ارتباط با سرآیند و بدنه پاسخ HTTP توضیح خواهیم داد.

سرآیند و بدنه پیام HTTP

قسمت‌های دیگر پاسخ HTTP همانطور که گفتیم شامل خطوط سرآیند و بدنه پیام است. در قسمت سرآیند اطلاعاتی در مورد بدنه پیام، گنجانده می‌شود. اگر پاسخ HTTP شامل بدنه باشد معمولا در قسمت سرآیند نوع محتوی : Content-Type و طول پاسخ (Content-Length) مشخص می‌گردد.

در قسمت Content-Type همانطور که از نامش پیداست، مشخص می‌گردد که متن پیام داده‌ها از چه نوعی می‌باشند به طور مثال html، image و غیره. در قسمت Content-Length نیز تعداد بایت‌های بدنه پیام مشخص می‌گردد. مثال زیر یک نمونه از پاسخ HTTP می‌باشد:

HTTP/1.1 200 OK
Content-Type: text/html
 
<html>
...
</html>

خط اول که خط وضعیت است شامل نسخه HTTP می‌باشد، کد پاسخ که همانطور که گفتیم کد ۲۰۰ یعنی پاسخ موفق، بعد از آن سرآیند قرار دارد که در آن نوع پیام را مشخص کرده است که html می‌باشد و بعد از آن نیز بدنه پیام آمده است.

رشته های پرس و جو یا (Query String)

رشته پرس و جو با استفاده از علامت سوال (؟) بعد از URL در یک درخواست HTTP تعریف می شود. رشته پرس و جو مجموعه ای از پارامترها  هستند که با & از یکدیگر جدا شده‌اند. در مثال زیر می‌بینید که بعد از URL و با علامت سوال این رشته آغاز شده و در ادامه با کاراکتر &، پارامترها از یکدیگر جدا شده‌اند.

GET /search?query=example&lang=en_US HTTP/1.1
Host: www.example.com

در برنامه‌های کاربردی وب بنیان (وب اپلیکیشن‌ها) یکی از ورودی‌های اصلی کاربران، رشته‌های جست و جو (Query Stringes) می‌باشد. بسیاری از حملات امنیتی نیز از طریق این ورودی‌ها بر ضد برنامه‌های کاربردی وب بنیان صورت می‌پذیرد، بنابراین برای یک متخصص تست نفوذ وب اپلیکیشن لازم است تا درک بسیار خوبی از رشته‌های جست و جو و پارمترهایش داشته باشد.

رمزگذاری URL

رمزگذاری URL راهی است برای نشان دادن کاراکتر‌هایی که نمی‌توانند (یا نباید) در داخل URL ها حضور داشته باشند, تا با خیال راحت در یک URL نمایش داده شوند. این امکان رمزگذاری و رمزگشایی کاراکترهای مشخصی را ایجاد می کند که درغیر این صورت باعث ایجاد مشکلات می شوند. در زیر چند نمونه از کاراکتر‌های رمزگذاری شده URL را آورده‌ایم:

کاراکتر کاراکترهای URL-encoded
@ %۴۰
%۲۲
< %۳C
% %۲۵

ادامه دارد…

تعداد بازدید: 185


تازه ترین ها