SQL Injection چیست؟
تزریق به پایگاه داده یا دیتابیس (SQL Injection) نوعی از حملات وب است که در آن فرد حمله کننده یا هکر میتواند اقدام به اجرا کردن دستورات دلخواه و مخرب خود بر روی پایگاه داده وب سایت مورد هدف کند. در این حمله، حمله کننده با استفاده از دانش خود (یا تنها با استفاده از یک برنامه ساده!) میتواند از نقضهای امنیتی موجود در کدهای نوشته شده توسط برنامه نویس سایت استفاده کرده و به اصطلاح آنها را اکسپلویت کند. چون در این حمله هکر درواقع به کد اسکیوال، کد دلخواه خود را اضافه میکند، تزریق SQL نام گرفته است.
یک حمله موفق اس کیو ال اینجکشن میتواند به راحتی سبب افشای دادههای مهم در دیتابیس (ازجمله رمزهای عبور، اطلاعات فردی کاربران و …)، اضافه کردن دادههای دلخواه حمله کننده به دیتابیس یا حذف کردن دادههای خاص از دیتابیس گردد.
حمله SQL Injection چگونه کار میکند؟
فرض کنید شما یک برنامه نویس سمت وب هستید و قصد دارید با دیتابیس از طریق دستورات SQL ارتباط برقرار کنید. چون همانطور که میدانید استفاده از زبان SQL برای برقراری ارتباط با دیتابیس ضروری است. کد زیر را فرض کنید که در زبان PHP نوشته شده است:
$sql_statement = “SELECT * FROM users WHERE name = ‘” . $_GET[“name”] . “‘”;
دستور بالا مقدار فیلد یا همان پارامتر username که توسط متد GET، متدی که پارامترها در مسیر URL مشخص میشوند، از طرف کاربر به سرور ارسال شده را در بین دو علامت ‘ قرار میدهد (تا توسط سرور SQL به عنوان رشته حروفی شناخته شود) و پس از آن فرض کنید که مقدار موجود در متغیر $sql_statement قرار است اجرا شود.
فرض کنید که کاربر فیلد name را به صورت عادی مثل مقدار زیر پر کند. مسیر از طریق متد GET به این شکل خواهد شد:
http://example.com/vul.php?name=Amirreza
در این صورت Query موجود در متغیر sql_statement به این صورت خواهد بود:
$sql_statement = “SELECT * FROM users WHERE name = ‘Amirreza'”;
و کوئری (حرف همزه به دلیل فونت سایت مانند ن نشان داده میشود) بدون مشکل اجرا خواهد شد.