18
تشکر

SQL Injection و راه حل آن

SQL Injection و راه حل آن

SQL Injection و راه حل آن

این مطلب در دسته بندی مطالب پی اچ پی است. پی اچ پی را در اینجا دنبال کنید.

SQL Injqction یکی از حملات احتمالی هکرها به سایت ها شمرده میشود که اتفاقا خیلی هم معروف است. در این حملات هکر یک کد SQL را به دیتابیس از طریق کدهای که ما نوشته ایم تزریق میکند. حالا این ما هستیم که باید جلوی اینکار را بگیریم. برای مثال وقتی شما از کد زیر برای نشان دادن یک خبر استفاده میکنید:

http://mysite/news.php?id=542

حالا اگر تدابیر درست را به کار نبرده باشید با تغییراتی در کد بالا توسط هکر میتواند سایت شما را در برابر SQL Injection تست کند. کاراکترهایی مانند * / \ = * ‘ “

این کاراکترها در واقع جزء Syntax زبان PHP است به همین خاطر موجب خطا میشود.

 مانند کد پایین:

http://mysite/news.php?id=54*/2


راه حل جلوگیری از SQL Injection

من خودم به شخصه واقعا گیج شدم. وقتی کاربر تازه واردی در مورده SQL Injection تحقیق میکند با انواع روش های مختلف آشنا میشود که بیشتر باعث گیج شدن کاربر خواهد شد. توابعی مانند mysql_real_escape_string و trim و امثال آنها ….

شما در صورتی باید از توابع بالا استفاده کنید که برای اتصال به دیتابیس از کد زیر استفاده کرده باشید.

@$connection=mysql_connect("localhost","root") or die("Colud not connect to Database  ==> ".mysql_error());
$db=mysql_select_db("test") or die("Colud not connect to DB ==> ".mysql_error());

اما در صورتی که شما از کلاس PDO برای اتصال به دیتابیس استفاده کنید بیش از 90 درصد حملات SQL Injection رفع میشود. و اگر شما امنیت بیشتری را طلب میکنید میتوانید برای اطمینان خاطر از توابعی که گفته شده هم استفاده کنید. اما PDO بهترین راه حل است. یک نمونه اتصال به پایگاه داده را از طریق PDO در زیر مشاهده میکنید.

$db = new PDO('mysql:host=localhost;dbname=test;charset=UTF8', 'root', '');

در صورتی که با PDO آشنایی ندارید درخواست خود را ثبت کنید تا مطلبی در مورده این بحث بر روی سایت بگذاریم.

 

مطالب مرتبط:

XSS و راه حل آن

  • برای وصل شدن به دیتا بیس متد جدید به صورت mysqli_connect است

  • mojtaba می‌گه:

    سلام
    من از مطالب شما خیلی استفاده کردم.
    ممنون و موفق باشید

  • حمید می‌گه:

    باسلام
    انشاءالله نماز روزه هاتون قبول حق باشه

    مطابتون عالی.
    می خواستم بگم که
    mysql_real_escape_string من از این تابع برای گذاشتن مطالب در بانک استفاده میکنم و برای نمایشش هم همین جوری بدون هیچ فیلتری نمایش میدم مشکلی که نداره . البته بجز پسووردها برای اونها از الگوریتم sha1 استفاده میکنم.

  • سمیه احسانی می‌گه:

    یه سوال دیگه هم داشتم من از mysql_set_charset استفاده کردم ولی توی بانک کاراکترهای اضافه مثل \\ یا amp; وارد میشه و زمان نمایش باید یه تابع بذارم که همه اینا رو برداره میشه کاری کرد که اینا وارد دیتابیس نشه خیلی لطف میکنیداگه زودتر جواب بدید

    • محسن شفیعی می‌گه:

      خوب همون تابعی که زمان نمایش میزارید تا برداشته بشه، زمان درج در دیتابیس قرار بدید.
      البته یک سری نظراتی وجود داره مثل اینکه بهتره داده ها به همون صورت که از کاربر گرفته میشه در دیتابیس ذخیره بشه و فقط زمان نمایش اونها رو فیلتر کرد تا اطلاعات اصلی حفظ بشه.

  • سمیه احسانی می‌گه:

    سلام می خواستم بدون PDO رو گذاشتید کجاست ؟ ممنون میشم

  • siavash می‌گه:

    دوست عزیز !
    ممنون بابت مطالبتون – خیلی مفید هست !
    اما از قدیم میگن نیکی و پرسش ؟!
    حتما توضیحی در مورد PDO بگذارید

    با تشکر


  • نظرات این مطلب بسته است.