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

مقالات

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

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

قسمت اول

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

پروتکل HTTP یک پروتکل مبتنی بر (درخواست-پاسخ) می باشد که  stateless است (وضعیت و تاریخچه پیام‌های گذشته را حفظ نمی‌کند). پروتکل HTTP از سه بخش تشکیل شده است:

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

    پروتکل HTTP در لایه Application مدل ارتباطی OSI قرار دارد و برای برقراری ارتباط شبکه ای میان سرویس گیرنده و سرویس دهنده از پروتکل TCP/IP می نماید.  سه نسخه ارائه شده HTTP عبارت است از:

  • HTTP 1.0: در سال ۱۹۹۶ منتشر شد.
  • HTTP 1.1: این نسخه در سال ۱۹۹۷ به انتشار رسید.
  • HTTP 2.0: این نسخه در سال ۲۰۱۵ منتشر شد.

TCP و HTTP

پورت پیش فرض برای پروتکل HTTP پورت ۸۰  و اگر از HTTPS استفاده می‌کنید  پورت ۴۴۳ می‌باشد.  پروتکل  HTTP بر روی پروتکل کنترل انتقال (TCP) اجرا می‌شود. TCP یکی از اصلی‌ترین پروتکل‌های مورد استفاده در اینترنت است که از جمله فواید آن می‌توان به تحویل قابل اطمینان، مرتب سازی و بررسی خطا جریان داده اشاره کرد.

تفاوت نسخه‌های HTTP

HTTP  یک پروتکل مبتنی بر خط است، یعنی هر سرآیند بر روی خط خود نمایش داده می‌شود و هر خط در یک Carriage Return Line Feed (CRLF) خاتمه می‌یابد و با یک خط خالی سرآیند از بدنه اختیاری (optional body) مربوط به درخواست و یا پاسخ، جدا می‌گردد.

تا زمان HTTP  نسخه ی ۱٫۱ این پروتکل یک پروتکل مبتنی بر متن بود، هر چند که با آمدن HTTP 2.0 این موضوع تغییر کرد، نسخه ۲٫۰ پروتکل HTTP بر خلاف نسخه‌های قبلی‌اش،  به صورت یک پروتکل باینری می باشد با بیشترین کاربردهایی که نیاز به رمزگذاری TLS دارند. شایان ذکر است که در اکثر موارد پروتکل HTTP 2.0 با HTTP 1.1 تفاوتی در نحوه تعامل ندارد و پروتکل HTTP 1.1 در حال حاضر نیز مورد استفاده است و هنوز بسیاری از وب سرورها مانند Apache و NGINX آن  را پشتیبانی می‌نمایند.

روش‌ها در HTTP

در راستای ایجاد یک درخواست HTTP، یک کاربر ابتدا یک ارتباط TCP با یک سرور وب مشخص ایجاد می‌نماید. بر روی پورت HTTP (80 یا ۴۴۳ ) این درخواست با یک خط درخواست شروع می‌شود، این خط درخواست شامل یک روش یا متد است (در مثال که آورده‌ایم روش GET را انتخاب کرده‌ایم)، یک URL و نسخه پروتکل HTTP. همچنین ما بایستی یک سرآیند میزبان نیز اضافه کنیم تا به کاربر HTTP بگوییم این درخواست را به کجا بفرستد.

                                                                                     GET / HTTP/1.1
                                                                               Host: www.example.com

وقتی شما در مرورگر خود http://www.example.com را تایپ می‌کنید، دقیقا مرورگر شما کار بالا را انجام می‌دهد. حال اگر بخواهید محتویات http://www.example.com/about.html  را به دست آورید بایستی درخواست زیر را ارسال نمایید.

                                                                           GET /about.html HTTP/1.1
                                                                               Host: www.example.com

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

روش توصیف
GET برای گرفتن یک منبع از سرور
POST برای قرار دادن یک داده در یک منبع
TRACE برای eco back کردن هر چیزی که توسط کاربر ارسال شده است. این روش عموما برای حملات cross-site Scripting مورد استفاده قرار می‌گیرد.
PATCH روش PATCH برای نصب بروزرسانی‌ها بر روی یک منبع
PUT روش PUT برای جایگزین کردن منبع
HEAD روش HEAD مانند روش GET می‌باشد تنها تفاوتش در این است که بدنه (body) را درخواست نمی‌نماید.
DELETE دستور DELET برای پاک کردن یک منبع خاص به کار می‌رود.
OPTIONS روش OPTIONS برای توصیف روش‌های پشتیبانی شده برای یک منبع به کار می‌رود.
CONNECT روش Connect برای برپا ساختن یک تونل با سرور هدف می‌باشد، این سرور توسط منبع هدف مشخص شده و توسط پراکسی‌های HTTP یا HTTP مورد استفاده قرار می‌گیرد.

ادامه دارد…

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


تازه ترین ها