• ایمن سازی وبسایت در مقابل حملات هکرها بوسیله .htaccess

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

    در این مقاله چند راهکار بسیار مهم و مفید (لوگکت) جهت محافظ از وبسایت شما در برابر حملات شناخته شده ای نظیر Cross-Site Scripting، Local File Inclusion، SQL Injection را آموزش میدهیم.
    این مقاله صرفا برای سایت هایست که بر روی سرور Apache میزبانی میشوند و به .Htaccess دسترسی دارند، دسترسی به .Htaccess ممکن از سوی مدیر سرور محدود شده باشد، اگر اینچنین است این مقاله برای شما کارایی ندارد.


    توجه: لطفا قبل از شروع ابتدا از فایل .Htaccess خود یک نسخه پشتیبان تهیه کنید.

    شروع کار:

    دسترسی به فایلهای درون پوشه را ببندید.

    Code:
    # deny directory browsing
    Options All -Indexes
    حدود ۷۰ تا ۸۰ درصد از وبسایت ها مقابل حملات LFI آسیب پذیر هستند، هکر ها از این حفره جهت بهره برداری و گرفتن shell استفاده میکنند، شما میتوانید از طریق .htaccess وبسایت خود را مقابل این حملات ایمن سازی کنید.
    در زیر میتوانید یک نمونه از کد php آسیب پذیر در مقابل حملات LFI را مشاهده کنید:

    Code:
    <?php
    // LFI Vulnerable Code
    $redirect = $_GET[redirect];
    include($redirect);
    ?>
    کد زیر زیر به لطف ارائه SigSiu.net میتواند شما را مقابل این حملات ایمن کند.

    Code:
    ########## Begin - File injection protection, by SigSiu.net
    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
    RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
    RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC]
    RewriteRule .* - [F]
    ########## End - File injection protection

    در ادامه کد بالا (لوگکت) ممکن است بخواهد از URL encoding بجای http:// استفاده کنید، بدین جهت کد زیر را در خط دوم کد بالا جایگزین کنید:

    Code:
    RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http%3A%2F%2F [OR]
    افزودن کد زیر به فایل .htaccess میتواند چند لایه امنیتی در مقابل حملاتی که با استفاده از proc/self/environ method نفوذ پذیری را ممکن میکنند (لوگکت) اضافه کند:

    Code:
    #proc/self/environ? no way!
    RewriteCond %{QUERY_STRING} proc\/self\/environ [NC,OR]
    - کد زیر میتواند از شما در مقابل Apache HTTP Server CVE-2011-3192 Denial Of Service Vulnerability که نخستین بار در August 2011 کشف شد محافظ کند، البته این کد مخصوص کسانیست که امکان به روز رسانی سرور خود را ندارند، اگر از نسخه به روز تر از این تاریخ میزبانی میشوید، اجرای این کد لزومی ندارد.

    Code:
    # drop Range header when more than 5 ranges.
    # CVE-2011-3192
    SetEnvIf Range (,.*?){5,} bad-range=1
    RequestHeader unset Range env=bad-range
    # optional logging.
    #CustomLog insert-path-and-name-of-log common env=bad-range
    - استفاده از x-frame یکی از غیر اصولی ترین و خطرناک ترین کد هاییست که شما میتوانید بر روی وبسایت خود اجرا کند و یا اگر از سیستم های مدیریت محتوا استفاده میکنید به کاربران خود اجازه دهید تا از این کد استفاده کنند، قصد آموزش اینکه این کد چطور میتواند حفره ای برای نفوذ باشد را در این مقاله نداریم و صرفا به شما آموزش میدهیم که چطور میتوانید از اجرا شدن این کد با اسفاده از .htaccess جلوگیری کنید:

    Code:
    # Don't allow any pages to be framed - Defends against CSRF
    Header set X-Frame-Options DENY
    در ادامه کد بالا که اجرای کد x-frame را غیر فعال میکند، متوانید به جای DENY از SAMEORIGIN جهت اجازه دادن کد x-frame ی که تنها از سایت خودتان اجرا میشود، استفاده کنید.
    بدین ترتیب تنها صفحات داخلی وبسایت شما اجازه قرار گرفتن در کد x-frame را خواهند داشت.


    - در نسخه های ۸ و ۹ مرورگر اینترنت اکسپلورر با استفاده از کد زیر از cross site scripting محافظت کنید.
    توجه: استفاده از این کد ممکن است کارایی برخی از وبسایت ها را مختل کند، اگر این مشکل برای شما پیش آمد کافیست تا مقدار 1 را به 0 تغییر دهید.

    Code:
    # Turn on IE8-IE9 XSS prevention tools
    Header set X-XSS-Protection "1; mode=block"
    - Content Security Policy یک لایه افزوده شده امنیت ایست که میتواند شما را در مقابل حملاتی نظیر Cross Site Scripting و data injection ایمن کند، کد زیر اجرای جاوا کد های خارجی را محدود میکند و اجازه اجرا را به آنها نمیدهد، اما اگر در وبسایت خود از سرویسهای نظیر Google Analytics استفاده میکنید این کد جلوی کارایی آن را میگیرد چرا که استفاده از اینگونه سرویسها مستلزم اجرای جاوا کد میباشد.

    Code:
    # Only allow JavaScript from the same domain to be run.
    # Don't allow inline JavaScript to run.
    Header set X-Content-Security-Policy "allow 'self';"

    - کد زیر که توسط یک هکر کلاه سفید در اینجا ارسال شده میتواند از سرور شما محافظ کند.
    کد زیر جلوی کاراکترهای غیر استاندارد را خواهد گرفت و این عمل میتواند شما در مقابل حملاتی که با درخواست HTTP نفوذ پذیری را ممکن میکند ایمن کند.


    Code:
    # Prevent use of specified methods in HTTP Request 
    RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC,OR] 
    # Block out use of illegal or unsafe characters in the HTTP Request 
    RewriteCond %{THE_REQUEST} ^.*(\\r|\\n|%0A|%0D).* [NC,OR] 
    # Block out use of illegal or unsafe characters in the Referer Variable of the HTTP Request 
    RewriteCond %{HTTP_REFERER} ^(.*)(<|>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR] 
    # Block out use of illegal or unsafe characters in any cookie associated with the HTTP Request 
    RewriteCond %{HTTP_COOKIE} ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR] 
    # Block out use of illegal characters in URI or use of malformed URI 
    RewriteCond %{REQUEST_URI} ^/(,|;|:|<|>|">|"<|/|\\\.\.\\).{0,9999}.* [NC,OR] 
    # Block out  use of empty User Agent Strings
    # NOTE - disable this rule if your site is integrated with Payment Gateways such as PayPal 
    RewriteCond %{HTTP_USER_AGENT} ^$ [OR] 
    # Block out  use of illegal or unsafe characters in the User Agent variable 
    RewriteCond %{HTTP_USER_AGENT} ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR] 
    # Measures to block out  SQL injection attacks 
    RewriteCond %{QUERY_STRING} ^.*(;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark).* [NC,OR] 
    # Block out  reference to localhost/loopback/127.0.0.1 in the Query String 
    RewriteCond %{QUERY_STRING} ^.*(localhost|loopback|127\.0\.0\.1).* [NC,OR] 
    # Block out  use of illegal or unsafe characters in the Query String variable 
    RewriteCond %{QUERY_STRING} ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC]


    • سطح: پیشرفته
    • نویسنده: مهدی
    • انتشار این مطلب تنها با ذکر منبع مجاز است
    4 پاسخ
    1. Cyber's Avatar
      Cyber -
      Thank you

    1. ثبت نام نشده's Avatar
      ثبت نام نشده -
      مرسی عالی بود

    1. ثبت نام نشده's Avatar
      ثبت نام نشده -
      very good, thank you

    1. ثبت نام نشده's Avatar
      ثبت نام نشده -
      من تو این قسمت ارور ۵۰۰ میگیرم:

      ########## Begin - File injection protection, by SigSiu.net
      RewriteCond %{REQUEST_METHOD} GET
      RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
      RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
      RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC]
      RewriteRule .* - [F]
      ########## End - File injection protection

    ارسال پاسخ