در این پست با یکی دیگر از ترفندهای وردپرس با عنوان محافظت سایت وردپرس از حملات تزریق اسکریپت در خدمت شما هستیم.
حملات تزریق اسکریپت یکی از روشهای نفوذ و جلوگیری از دسترسی غیرمجاز به یک وب سایت است، این کار توسط یک هکر انجام می شود. در حملات تزریق اسکریپت هكرها كدهاي خود را جايگزين كدهاي صفحات وب پويا مي كنند. اين حمله اغلب هنگامي صورت مي گيرد كه يك سايت جهت درخواست اطلاعات كاربر از Query string استفاده مي کند. كدهایی كه جايگزين كدهاي صفحات پويا مي شوند، بر روي كامپيوتر كاربر اجرا مي شوند. اين كدها مي توانند اطلاعات موجود در كامپيوتر کاربر مانند: رمز کاربری و کوکی ها و … را به سرقت ببرند و به صورت مخرب بكار گيرند.
تاریخچه این نوع حملات به سال ۱۹۹۶ و سالهای اولیه صفحات وب باز میگردد، در این هنگام رسانهها این مشکلات را به ضعف امنیتی مرورگرها نسبت داده بودند. شرکت ارتباطی Netscape که جز اولین تولیدکنندگان مرورگرهای وب و همچنین سازنده زبان جاوااسکریپت بود، سیاست دامنه شخصی را به این زبان اضافه کرد، که جلوی دسترسی به آدرسهای خارج از دامنه وب سایت را میگرفت و آنها را محدود می کرد.
مشکل:
حفاظت وب سایت های پویا بسیار مهم است. اکثر توسعه دهندگان همیشه از GET و POST محافظت می کنند، اما گاهی اوقات این کافی نیست. ما باید از وب سایت خود در مقابل حملات تزریق اسکریپت و هر گونه تلاش برای تغییر PHP GLOBALS و متغیر REQUEST_ محافظت کنیم.
راه حل:
کد زیر حملات تزریق اسکریپت و هرگونه تلاش برای تغییر PHP GLOBALS و متغیر REQUEST_ را بلوکه می کند. آن را در فایل htaccess خود (واقع در root نصب وردپرس ) قرار دهید، اطمینان حاصل کنید که از فایل htaccess پشتیبان گرفته اید، قبل ازاینکه آن را تغییر دهید.
Options +FollowSymLinks RewriteEngine On RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) RewriteRule ^(.*)$ index.php [F,L]
توضیح کد:
با استفاده از فایل htaccess می توانیم درخواست ها را بررسی کنیم. در اینجا ما بررسی می کنیم که آیا درخواست حاوی <script> است و اینکه آیا برای تغییر مقدارهای PHP GLOBALS و یا متغیر _REQUEST تلاش شده است یا نه، اگر هر یک از این شرایط مراعات شود، درخواست مسدود شده و خطای 403 به مرورگر مشتری بازگردانده می شود.