چگونه از حملات تزریق SQL در وردپرس جلوگیری کنیم
آیا میدانستید که سایت وردپرس شما همین حالا میتواند هدف هکرها باشد؟
درست است! امروزه وردپرس بیش از 43٪ از تمام وبسایتهای اینترنت را قدرت میبخشد. این خبر عمومی، وبسایتهای وردپرسی را به هدفی بزرگ برای هکرها تبدیل کرده است.
یکی از مضرترین روشهایی که آنها حمله میکنند، از طریق تزریق SQL است. یک تزریق SQL میتواند وبسایت شما را خراب کند، دادهها را سرقت کند و محتوای شما را نابود کند. بیشتر از آن، میتوانند شما را از وبسایتتان قفل کنند! ترسناک به نظر میرسد، درست است؟ اما نگران نباشید، شما میتوانید از سایت خود محافظت کنید. این همان چیزی است که این مقاله درباره آن صحبت میکند.
SQL چیست؟
SQL مخفف Structured Query Language (زبان پرسوجوی ساختار یافته) است. این یک روش برای تعامل با پایگاههای داده است که مقدار زیادی اطلاعات مانند جزئیات کاربران، پستها یا نظرات یک وبسایت را ذخیره و سازماندهی میکنند. SQL به ما کمک میکند از پایگاه داده اطلاعات بخواهیم یا دادههای جدیدی برای ذخیره به آن بدهیم.
هنگام نوشتن یک کوئری SQL، شما از پایگاه داده یک سؤال میپرسید یا به آن یک وظیفه میدهید. برای مثال، اگر بخواهید همه کاربران سایت خود را ببینید، یک کوئری SQL میتواند آن لیست را بازیابی کند.
SQL قدرتمند و ضروری است، زیرا تمام سایتهای وردپرس از پایگاه دادهها برای ذخیره محتوا استفاده میکنند.
حمله تزریق SQL چیست؟
حملات تزریق SQL در وردپرس سعی میکنند به پایگاه داده سایت شما دسترسی پیدا کنند.
تزریق SQL (SQLi) به هکرها اجازه میدهد از یک کوئری SQL آسیبپذیر سوءاستفاده کرده و یک کوئری ساختهشده توسط خودشان را اجرا کنند. این حمله زمانی رخ میدهد که هکر پایگاه داده را فریب دهد تا دستورات مخرب SQL را اجرا کند.
هکرها میتوانند این دستورات را از طریق فیلدهای ورودی سایت شما، مانند فرمهای ورود یا نوارهای جستجو ارسال کنند. اگر وبسایت ورودیها را بهدقت بررسی نکند، یک دستور میتواند به پایگاه داده دسترسی دهد. تصور کنید یک هکر بهجای وارد کردن نام کاربری، یک دستور SQL وارد کند. ممکن است پایگاه داده را فریب داده و دادههای خصوصی مانند رمزهای عبور و ایمیلها را نمایش دهد. مهاجم میتواند از آن برای تغییر یا حذف دادههای پایگاه داده استفاده کند.
پایگاه داده شما تمام دادهها و محتوای تولیدشده توسط کاربران را در خود نگه میدارد. این شامل صفحات، پستها، لینکها، نظرات و کاربران است. برای “آدمهای بد”، این یک معدن طلا از دادههای ارزشمند است.
تزریقهای SQL خطرناک هستند زیرا به هکرها اجازه میدهند دادهها را بدزدند یا کنترل یک وبسایت را به دست بگیرند. یک فایروال وردپرس از حملات تزریق SQL جلوگیری میکند. این حملات میتوانند سایتها را بهسرعت به خطر بیندازند و هک کنند.
تزریقهای SQL: سه نوع اصلی
سه نوع اصلی از حملات تزریق SQL وجود دارد. هر نوع به روشهای مختلف عمل میکند، اما همه آنها تلاش میکنند پایگاه داده را فریب دهند. ما به بررسی هر یک از این انواع خواهیم پرداخت.
تزریق SQL از نوع In-Band
این احتمالاً رایجترین نوع حمله است. در این نوع حمله، هکر دستور را ارسال کرده و نتایج را از همان روش ارتباطی دریافت میکند. به عبارت دیگر، هکر یک درخواست ارسال کرده و فوراً پاسخ آن را دریافت میکند.
دو نوع حمله تزریق SQL از نوع In-band وجود دارد:
- تزریق SQL مبتنی بر خطا (Error-based SQLi)
- تزریق SQL مبتنی بر یونین (Union-based SQLi)
در حملات مبتنی بر خطا، هکر باعث میشود پایگاه داده پیامی خطا ارسال کند. این پیام ممکن است اطلاعات حساس مانند ساختار پایگاه داده و تنظیمات آن را فاش کند.
اما در حملات مبتنی بر یونین، هکر از دستور SQL UNION برای ترکیب درخواست خود با یک کوئری استاندارد استفاده میکند. این امر میتواند به آنها دسترسی به دادههای دیگری که در پایگاه داده ذخیره شده است بدهد.
تزریق SQL استنباطی (Inferential SQLi)
در تزریق SQL استنباطی، هکر نتایج را بهطور آنی مشاهده نمیکند. بلکه از کوئریهایی استفاده میکند که پاسخهای “بله” و “نه” را از پایگاه داده دریافت میکنند. هکرها میتوانند ساختار پایگاه داده یا دادهها را از طریق نحوه واکنش سایت آشکار کنند.
این کار به دو روش رایج انجام میشود:
- تزریق SQL مبتنی بر بولین (Boolean-based SQLi)
- تزریق SQL مبتنی بر زمان (Time-based SQLi)
در تزریق SQL مبتنی بر بولین، هکر کوئریهایی ارسال میکند که تنها پاسخ “صحیح” یا “غلط” دارند. به عنوان مثال، آیا شناسه کاربری بیشتر از 100 است؟ این روش به هکرها این امکان را میدهد که بر اساس نحوه واکنش سایت دادههای بیشتری درباره سایت جمعآوری کنند.
در تزریق SQL مبتنی بر زمان، هکر یک کوئری میفرستد که باعث میشود پایگاه داده در صورت “بله” بودن پاسخ، مدت بیشتری برای جواب دادن زمان ببرد. هکر میتواند با توجه به تأخیر در پاسخ، اطلاعات مورد نیاز خود را بدست آورد.
تزریق SQL از نوع Out-of-band
تزریق SQL از نوع Out-of-band یک نوع حمله کمتر رایج اما به همان اندازه خطرناک است. هکرها از روشهای مختلفی برای دریافت نتایج استفاده میکنند. معمولاً آنها پایگاه داده را به سروری که تحت کنترل خود دارند متصل میکنند.
هکرها نتایج را بهطور آنی مشاهده نمیکنند. با این حال، آنها میتوانند دادهها را به جایی دیگر، مانند ایمیل یا اتصال شبکه، ارسال کنند. این روش زمانی کاربرد دارد که سایت روشهای معمول تزریق SQL را مسدود کرده باشد.
چرا جلوگیری از تزریق SQL ضروری است
تزریق SQL یک خطر بزرگ برای وبسایتها است. این حملات میتوانند آسیبهای مختلفی وارد کنند — از سرقت دادهها و خرابی وبسایت گرفته تا مشکلات قانونی، از دست دادن اعتماد و موارد دیگر.
هکرها میتوانند دادههایی مانند نامکاربری، رمزعبور و ایمیلها را سرقت کنند. آنها ممکن است با حذف و تغییر دادههای شما به سایت آسیب برسانند. علاوه بر این، ساختار سایت شما را به هم میزنند و آن را غیرقابل استفاده میکنند.
آیا دادههای کاربران شما سرقت شدهاند؟ اگر سایت شما دادههای حساس را مدیریت میکند، ممکن است با مشکلات قانونی روبرو شوید. مردم ممکن است به شما بیاعتماد شوند اگر ببینند سایت شما هک شده است. در نتیجه، شهرت سایت شما آسیب خواهد دید.
بنابراین، جلوگیری از تزریق SQL قبل از وقوع آن بسیار ضروری است.
راههای جلوگیری از حملات تزریق SQL در وردپرس
خوب، حالا میدانیم SQL چیست و وردپرس چگونه به آن وابسته است. همچنین میدانیم که مهاجمان از آسیبپذیریهای SQL سوءاستفاده میکنند. من 11 نکته برای حفظ امنیت سایت وردپرسی شما در برابر تزریقهای SQL جمعآوری کردهام. این نکات آسیبپذیری شما را محدود کرده و سایت شما را از حملات تزریق SQL محافظت میکنند.
1. اعتبارسنجی ورودی کاربران
حملات تزریق SQL معمولاً از طریق فرمها یا فیلدهای ورودی در سایت شما اتفاق میافتند. این فیلدها میتوانند شامل فرم ورود، جعبه جستجو، فرم تماس یا بخش نظرات باشند. آیا هکر دستورات SQL مخرب را وارد یکی از این فیلدها میکند؟ آنها ممکن است سایت شما را فریب داده و با اجرای این دستورات، دسترسی به پایگاه داده شما پیدا کنند.
بنابراین، همیشه باید تمامی دادههای ورودی سایت خود را تمیز کرده و اعتبارسنجی کنید. کاربران نباید قادر باشند دادههایی ارسال کنند که فرمت مشخصی را رعایت نمیکند. سادهترین راه برای جلوگیری از این مشکل استفاده از افزونهای مانند Formidable Forms است که ابزاری پیشرفته برای افزودن فرمها است. با این حال، وردپرس بسیاری از توابع داخلی برای تمیز کردن و اعتبارسنجی ورودیها دارد. این توابع شامل sanitize_text_field()، sanitize_email() و sanitize_url() میشوند.
اعتبارسنجی دادهها، ورودیهای کاربران را قبل از ارسال به پایگاه داده تمیز میکند. این توابع کاراکترهای ناخواسته را حذف کرده و اطمینان حاصل میکنند که دادهها برای ذخیرهسازی ایمن هستند.
2. اجتناب از SQL دینامیک
SQL دینامیک به شما این امکان را میدهد که دستورات SQL را به صورت پویا و در زمان اجرا ایجاد کنید. SQL دینامیک چگونه با SQL استاتیک تفاوت دارد؟ شما میتوانید کوئریهای SQL انعطافپذیر و عمومی ایجاد کنید که برای شرایط مختلف تنظیم شوند. به همین دلیل، SQL دینامیک معمولاً کندتر از SQL استاتیک است، زیرا نیاز به تجزیه در زمان اجرا دارد.
SQL دینامیک میتواند بیشتر در معرض حملات تزریق SQL قرار گیرد. این مشکل زمانی رخ میدهد که مهاجم با تزریق کد SQL مخرب، یک کوئری را تغییر میدهد. پایگاه داده ممکن است پاسخ دهد و این کد مضر را اجرا کند. در نتیجه، مهاجم میتواند به دادهها دسترسی پیدا کند، آنها را خراب کند یا حتی پایگاه داده شما را هک کند.
چگونه میتوانید سایت وردپرس خود را ایمن نگه دارید؟ از دستورات آماده، رویههای ذخیره شده یا کوئریهای پارامتری استفاده کنید.
3. بهروزرسانی منظم تمها و افزونههای وردپرس
نگهداری وردپرس و تمام افزونهها بهروز، اولین قدم در حفظ امنیت سایت شماست. هکرها معمولاً به دنبال نسخههای قدیمی نرمافزار با مشکلات امنیتی شناختهشده هستند.
برای وردپرس، تمها و افزونهها بهروزرسانیهای منظم امنیتی منتشر میشود که مشکلات امنیتی را اصلاح میکنند. اگر این بهروزرسانیها را نادیده بگیرید، سایت شما در معرض حملات قرار میگیرد.
برای ایمنی بیشتر، بهروزرسانیهای خودکار نسخههای جزئی وردپرس را تنظیم کنید. بهطور مرتب از بهروزرسانی تمها و افزونهها مطمئن شوید. تنها از افزونههای معتبر از منبع رسمی وردپرس یا توسعهدهندگان شناختهشده استفاده کنید.
با بهروزرسانی منظم، بسیاری از روشهای حمله هکرها را مسدود میکنید.
4. افزودن فایروال وردپرس
فایروال یکی از بهترین روشها برای حفظ امنیت سایت وردپرس شماست. این فایروال همچون سپری برای سایت وردپرس شما عمل میکند و بهعنوان یک نگهبان امنیتی تمام ترافیک ورودی را بررسی میکند. فایروال تصمیم میگیرد که چه کسی میتواند وارد سایت شما شود و چه کسی باید مسدود شود.
پنج نوع اصلی فایروال وردپرس وجود دارد:
- فایروالهای مبتنی بر افزونه
- فایروالهای برنامههای وب
- فایروالهای مبتنی بر ابر
- فایروالهای سطح DNS
- فایروالهای سطح برنامه
فایروالهای مبتنی بر افزونه را میتوانید روی سایت وردپرس خود نصب کنید. این فایروالها از داخل سایت شما کار میکنند و ترافیک بد را مسدود میکنند. فایروالهای برنامههای وب ترافیک ورودی و خروجی یک سرویس وب را فیلتر، بررسی و مسدود میکنند. این فایروالها آسیبپذیریهای امنیتی خطرناک که بیشتر در ترافیک وب دیده میشود را شناسایی و از آنها دفاع میکنند. فایروالهای مبتنی بر ابر از خارج سایت شما عمل میکنند. آنها ترافیک بد را قبل از رسیدن به سایت شما مسدود میکنند. فایروالهای سطح DNS ترافیک سایت شما را از طریق سرورهای پروکسی ابری خود هدایت میکنند و تنها ترافیک واقعی را به سرور وب شما ارسال میکنند. در نهایت، فایروالهای سطح برنامه ترافیک را هنگامی که به سرور شما میرسد بررسی میکنند. این یعنی قبل از بارگذاری اکثر اسکریپتهای وردپرس.
افزونههای امنیتی پایدار مانند BBQ Firewall و Ninja Firewall همچنین میتوانند بهعنوان فایروال عمل کنند. این افزونه ها به خاطر سبک بودن، سرعت سایت شما را کاهش نمیدهد تا سئو تکنیکال شما به مشکل برنخورد.
5. پنهان کردن نسخه وردپرس
نسخههای قدیمیتر وردپرس نسخه وردپرس را در فوتر پنل مدیریت نمایش میدهند. نشان دادن نسخه وردپرس همیشه چیز بدی نیست، اما این کار به هکرها فرصتی برای حمله به سایت شما میدهد. آنها میخواهند از آسیبپذیریهای نسخههای قدیمی وردپرس سوءاستفاده کنند.
آیا از نسخه قدیمیتری از وردپرس استفاده میکنید؟ هنوز هم میتوانید نسخه وردپرس خود را پنهان کنید:
- با استفاده از یک افزونه امنیتی مانند Sucuri یا Wordfence برای پاک کردن شماره نسخه
- یا با افزودن کمی کد به فایل functions.php خود.
function hide_wordpress_version() {
return '';
}
add_filter('the_generator', 'hide_wordpress_version');
این کد شماره نسخه وردپرس شما را از نمایش در فایل header.php تم و فیدهای RSS جلوگیری میکند. این عمل یک لایه امنیتی کوچک اما مفید به سایت شما اضافه میکند. بنابراین، شناسایی سایت شما برای هکرها دشوارتر میشود.
6. ایجاد پیامهای خطای سفارشی پایگاه داده
مهاجمان میتوانند از طریق پیامهای خطا نحوه تنظیم پایگاه داده شما را مشاهده کنند. برای جلوگیری از این موضوع، باید یک پیام خطای سفارشی برای پایگاه داده ایجاد کنید که کاربران مشاهده کنند. با پنهان کردن جزئیات خطا، هکرها پیدا کردن نقاط ضعف سایت شما را سختتر خواهند کرد. سایت شما زمانی که دادههای کمتری در بخش جلویی نمایش داده میشود، بسیار امنتر باقی میماند.
برای انجام این کار، کد را کپی کرده و در یک فایل جدید به نام db-error.php قرار دهید.
<?php // Custom WordPress Database Error Page
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 600'); // 1 hour = 3600 seconds
// If you want to send an email to yourself upon an error
// mail("your@email.com", "Database Error", "There is a problem with the database!", "From: Db Error Watching");
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Database Error</title>
<style>
body { padding: 50px; background: #04A9EA; color: #fff; font-size: 30px; }
.box { display: flex; align-items: center; justify-content: center; }
</style>
</head>
<body>
<div class="box">
<h1>Something went wrong</h1>
</div>
</body>
</html>
حالا فایل را در دایرکتوری اصلی پوشه /wp-content/ خود ذخیره کنید تا تغییرات اعمال شود.
7. تنظیم محدودیتهای دسترسی و مجوزها برای نقشهای کاربری
تنها مجوزهایی را که هر نقش برای انجام وظایف خود نیاز دارد اختصاص دهید. به عنوان مثال، ویرایشگران ممکن است به دسترسی به پایگاه داده وردپرس یا تنظیمات افزونهها نیازی نداشته باشند. امنیت سایت را با دادن دسترسی کامل به داشبورد فقط به نقش مدیر بهبود بخشید. محدود کردن دسترسی به ویژگیها برای نقشهای کمتری باعث کاهش احتمال حملات تزریق SQL میشود.
8. فعالسازی احراز هویت دو مرحلهای
یک روش عالی برای محافظت از سایت وردپرس شما، اعمال احراز هویت دو مرحلهای (2FA) است. چرا؟ زیرا این کار یک لایه امنیتی اضافی به صفحه ورود شما اضافه میکند. حتی اگر یک هکر رمز عبور شما را بشکند، باز هم بدون دسترسی به کد 2FA نمیتواند وارد سایت شود.
برای راهاندازی 2FA در وردپرس، مراحل زیر را دنبال کنید:
- نصب افزونه احراز هویت دو مرحلهای
گزینههای خوبی مانند Google Authenticator Two-Factor و WP 2FA وجود دارند. - انتخاب روش احراز هویت
افزونهها معمولاً سه گزینه ارائه میدهند: کدهای SMS، برنامههای احراز هویت، یا کلیدهای امنیتی. - اتصال حساب کاربری خود
آیا از Google Authenticator استفاده میکنید؟ آن را شروع کنید و کد QR داخل تنظیمات افزونه را اسکن کنید تا اتصال برقرار شود. اگر از SMS استفاده میکنید، شماره تلفن خود را وارد کرده و کدها را از طریق پیامک دریافت کنید. - آزمایش
از وردپرس خارج شوید و دوباره تلاش کنید وارد شوید. ابتدا نامکاربری و رمز عبور خود را مانند همیشه وارد کنید. سپس مرحله 2FA را تکمیل کرده و کدی که از طریق SMS یا ایمیل دریافت میکنید را وارد کنید. - فعالسازی کدهای پشتیبان (اختیاری)
برخی افزونهها این امکان را میدهند که کدهای پشتیبان تولید کنید. این کدها را در مکان امنی ذخیره کنید تا در صورت از دست دادن دسترسی به تلفن یا ایمیل خود بتوانید از آنها استفاده کنید.
9. حذف تمام توابع غیرضروری پایگاه داده
اطمینان حاصل کنید که جداولی که دیگر از آنها استفاده نمیکنید را حذف کرده و نظرات بیارزش یا تایید نشده را پاک کنید. پایگاه داده شما مقاومتر خواهد شد در برابر هکرهایی که سعی دارند از دادههای حساس سوءاستفاده کنند.
10. نظارت بر سایت برای فعالیتهای غیرعادی
به فعالیتهای غیرعادی در سایت خود توجه کنید. برای مثال، میتوانید به مواردی مانند تلاشهای مکرر برای ورود ناموفق یا افزایش ناگهانی ترافیک توجه کنید. افزونههای امنیتی مانند Wordfence یا Sucuri هنگامی که چیزی مشکوک به نظر میرسد، شما را مطلع میکنند. این کمک میکند تا مشکلات را قبل از بدتر شدن شناسایی کنید.
11. پشتیبانگیری منظم از سایت
پشتیبانگیری منظم بسیار مهم است. با یک نسخه پشتیبان، میتوانید به سرعت سایت خود را به حالت اولیه بازگردانید اگر هک شود. این کار را هر بار که یک بهروزرسانی مهم روی سایت خود انجام میدهید باید انجام دهید. همچنین شامل بهروزرسانی تمها و افزونهها نیز میشود.
برای پشتیبانگیریها یک برنامهریزی ایجاد کنید تا نیازهای شما را برآورده کند. به عنوان مثال، اگر هر روز محتوای جدید منتشر میکنید، ممکن است ایده خوبی باشد که پایگاه داده و فایلهای خود را روزانه پشتیبانگیری کنید.
بسیاری از افزونههای امنیتی پشتیبانگیری خودکار ارائه میدهند. البته شما میتوانید از افزونههای پشتیبانگیری مانند UpdraftPlus یا Solid Security نیز استفاده کنید. نسخههای پشتیبان خود را در مکانهای مختلفی مانند Dropbox و Google Drive ذخیره کنید. این کار به شما آرامش خاطر میدهد.
چگونه SQL Injection را از سایت خود حذف کنیم
فرض کنید که هماکنون تحت حمله قرار گرفتهاید و با یک حمله SQL injection فعال در سایت خود مواجه هستید. در این وضعیت، اقدامات پیشگیرانهای که قبلاً بررسی کردیم ممکن است کمک چندانی نکند. در اینجا کارهایی که میتوانید برای مقابله و دفاع از سایت خود انجام دهید آورده شده است:
- بررسی پایگاه داده برای تغییرات
به دنبال ورودیهای عجیب و غریب در حسابهای کاربری، محتوای سایت یا تنظیمات افزونهها باشید. - حذف کدهای مخرب
سایت خود را با یک افزونه امنیتی مانند Wordfence یا Sucuri اسکن کرده و کدهای مخرب را شناسایی و حذف کنید. - بازگردانی نسخه پشتیبان تمیز
آیا آسیب زیاد است؟ بازگرداندن سایت از یک نسخه پشتیبان موجود ممکن است بهترین گزینه باشد. - تغییر تمام رمزهای عبور
رمزهای عبور برای حساب مدیر وردپرس، پایگاه داده و حساب میزبان را تغییر دهید. - تقویت امنیت سایت
پس از پاکسازی سایت، مراحل 11 گانهای که قبلاً پوشش دادیم را انجام دهید تا از حملات آینده جلوگیری کنید.
نتیجهگیری
هکرها سایتهای ضعیف را دوست دارند. آنها به دنبال راههای آسان برای نفوذ، دزدی اطلاعات و ایجاد خسارت هستند. یکی از ترفندهایی که آنها اغلب استفاده میکنند، SQL injection است. اگر آنها راهی برای ورود پیدا کنند، میتوانند دادههای خصوصی شما را دزدیده، محتوای شما را تغییر دهند یا حتی سایت شما را تصاحب کنند. این خبر بدی هم برای شما و هم برای بازدیدکنندگان شماست.
اما خبر خوب این است که: شما میتوانید آنها را متوقف کنید! با انجام مراحل صحیح، میتوان این حملات را قبل از وقوع مسدود کرد. و نیازی نیست که شما یک متخصص فناوری باشید.
بسیاری از افراد امنیت سایت خود را نادیده میگیرند تا زمانی که دیگر خیلی دیر شده باشد. آنها فکر میکنند، “چرا یک هکر باید سایت من را هدف قرار دهد؟” اما هکرها فقط سایتهای بزرگ را هدف قرار نمیدهند. آنها هر سایتی با امنیت ضعیف را هدف قرار میدهند. بنابراین حتی بلاگهای کوچک و سایتهای جدید نیز در معرض خطر هستند. وقتی یک هکر وارد شود، میتواند آسیب زیادی به شما وارد کند. تعمیر یک سایت هکشده زمان، تلاش و هزینه میبرد. اما جلوگیری از حمله قبل از وقوع؟ این بسیار آسانتر است.
هکرها نمینشینند و منتظر نمیمانند، پس چرا شما باید منتظر بمانید؟ هزاران سایت روزانه مورد حمله قرار میگیرند، پس اجازه ندهید سایت شما بعدی باشد. سایت خود را بهروزرسانی کنید، فایروال اضافه کنید، 2FA را فعال کنید و تنظیمات امنیتی خود را بررسی کنید. این مراحل کوچک میتوانند به جلوگیری از مشکلات بزرگ در آینده کمک کنند.
سایت شما نیاز به محافظت در برابر افراد بد دارد. شما برای ساخت آن سخت تلاش کردهاید. هیچگاه آن را نادیده نگیرید و به روز و محافظت شده نگه دارید. بعد از این، سایت شما امنتر و مطمئنتر خواهد بود.