برای محافظت از تزریق کدهای مخرب و هدایت آنها به صفحه اخطار، تنظیمات زیر را در فایل .htaccess
سایت خود اعمال کنید:
<IfModule mod_rewrite.c>
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 ^(.*)$ https://www.miralishahidi.ir/warning.php [F,L]
</IfModule>
صفحهای که کاربران به هنگام تلاش برای تزریق کدهای مخرب هدایت میشوند، باید به شکل زیر طراحی شود:
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>هشدار امنیتی</title>
<style>
body {
font-family: 'Arial', sans-serif;
background-color: #f8d7da;
color: #721c24;
text-align: center;
padding: 50px;
}
.container {
background-color: #f5c6cb;
border: 1px solid #f5c6cb;
border-radius: 8px;
padding: 20px;
display: inline-block;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
}
h1 {
font-size: 24px;
}
p {
font-size: 18px;
}
a {
display: inline-block;
margin-top: 20px;
padding: 10px 20px;
background-color: #d4edda;
color: #155724;
text-decoration: none;
border-radius: 5px;
}
a:hover {
background-color: #c3e6cb;
}
</style>
</head>
<body>
<div class="container">
<h1>هشدار امنیتی</h1>
<p>به نظر میرسد که شما در تلاش برای اجرای اسکریپتهای مخرب هستید.</p>
<p>این فعالیت مسدود شده است. لطفاً از ارسال درخواستهای غیرمجاز خودداری کنید.</p>
<a href="index.php">بازگشت به صفحه اصلی</a>
</div>
</body>
</html>
برای اطمینان از عملکرد صحیح تنظیمات، از کدهای تست زیر استفاده کنید:
https://www.miralishahidi.ir/index.php?name=%3Cscript%3Ealert('XSS')%3C%2Fscript%3E
این درخواست پارامتر `name` را با یک کد JavaScript تزریق میکند که باید در صورت عدم محافظت مناسب، پیغام `alert` را نمایش دهد.
https://www.miralishahidi.ir/index.php?name=%3Cimg%20src=%22javascript:alert('XSS')%22%3E
این درخواست تزریق کد JavaScript از طریق تگ `<img>` را امتحان میکند. اگر سرور به درستی از این تزریق محافظت نکند، پیغام `alert` ظاهر خواهد شد.
https://www.miralishahidi.ir/index.php?GLOBALS[foo]=bar
این درخواست تزریق مقدار `bar` به پارامتر `GLOBALS[foo]` را بررسی میکند. این نوع تزریق ممکن است در صورت عدم حفاظت مناسب باعث تغییرات غیرمجاز شود.
https://www.miralishahidi.ir/index.php?_REQUEST%5Bfoo%5D=%3Cimg%20src=%22javascript:alert('XSS')%22%3E
این درخواست تزریق کد JavaScript به پارامتر `_REQUEST[foo]` را بررسی میکند. اگر سرور آسیبپذیر باشد، کد JavaScript در صفحه اجرا خواهد شد.
https://www.miralishahidi.ir/index.php?name=%3Cscript%3Ealert(document.cookie)%3C%2Fscript%3E&otherparam=value
در این درخواست، کد JavaScript برای نمایش کوکیها تزریق شده است. این تست برای بررسی آسیبپذیری XSS و دسترسی به اطلاعات حساس استفاده میشود.
https://www.miralishahidi.ir/index.php?GLOBALS%5Bfoo%5D=%3Cscript%3Ealert('XSS')%3C%2Fscript%3E
این درخواست تزریق کد JavaScript به پارامتر `GLOBALS[foo]` را بررسی میکند. اگر تنظیمات امنیتی به درستی پیادهسازی نشده باشد، پیغام `alert` باید نمایش داده شود.
https://www.miralishahidi.ir/index.php?name=%3Cimg%20src=%22javascript:alert('XSS')%22%3E&GLOBALS%5Bhidden%5D=value
این درخواست تزریق کد JavaScript به پارامتر `name` و همچنین تزریق مقدار به پارامتر `GLOBALS[hidden]` را بررسی میکند. هدف از این تست، بررسی تعامل بین پارامترهای مختلف است.
https://www.miralishahidi.ir/index.php?name=%3Csvg%20onload=alert('XSS')%3E
این درخواست تزریق کد JavaScript با استفاده از تگ SVG را امتحان میکند. اگر سرور به درستی محافظت نشود، پیغام `alert` در هنگام بارگذاری SVG نمایش داده خواهد شد.
https://www.miralishahidi.ir/index.php?name=%3Csvg%20onload=alert('XSS')%3E&GLOBALS%5Bfoo%5D=value
این درخواست ترکیب تزریق کد JavaScript با پارامترهای دیگر را بررسی میکند. هدف از این تست بررسی میزان حفاظت از تزریق کد در پارامترهای مختلف است.
برای انجام تستهای پنتست تزریق با استفاده از `curl`، میتوانید از دستورات زیر استفاده کنید:
curl "https://www.miralishahidi.ir/index.php?name=%3Cscript%3Ealert('XSS')%3C%2Fscript%3E"
curl "https://www.miralishahidi.ir/index.php?name=%3Cimg%20src=%22javascript:alert('XSS')%22%3E"
curl "https://www.miralishahidi.ir/index.php?GLOBALS[foo]=bar"
curl "https://www.miralishahidi.ir/index.php?_REQUEST%5Bfoo%5D=%3Cimg%20src=%22javascript:alert('XSS')%22%3E"
curl "https://www.miralishahidi.ir/index.php?name=<script>alert(document.cookie)</script>&otherparam=value"
curl "https://www.miralishahidi.ir/index.php?GLOBALS%5Bfoo%5D=%3Cscript%3Ealert('XSS')%3C%2Fscript%3E"
curl "https://www.miralishahidi.ir/index.php?name=%3Csvg%20onload=alert('XSS')%3E"
curl "https://www.miralishahidi.ir/index.php?name=%3Ciframe%20src=%22javascript:alert('XSS')%22%3E"
curl "https://www.miralishahidi.ir/index.php?name=%3Cobject%20data=%22javascript:alert('XSS')%22%3E"
curl "https://www.miralishahidi.ir/index.php?name=%3Cscript%3Eeval(String.fromCharCode(88,83,83))%3C%2Fscript%3E"
curl "https://www.miralishahidi.ir/index.php?name=%3Cscript%3Efunction%20test()%20%7B%20alert('XSS')%20%7D%3C%2Fscript%3E"
برای تست موفقیتآمیز، توجه داشته باشید:
warning.php
هدایت میشوند و هیچ کدی اجرا نمیشود.در اینجا یک نمونه برای تست POST آورده شده است (باید با ابزارهایی مانند Burp Suite یا Postman آزمایش شود):
POST /index.php HTTP/1.1
Host: www.miralishahidi.ir
Content-Type: application/x-www-form-urlencoded
name=<script>alert('XSS')</script>&GLOBALS[foo]=bar
نکته:
warning.php
هدایت میشوند و هیچ کدی اجرا نمیشود.