ویژگی تصویر

دستورات آماده (prepared) در PHP

  /  MySQL   /  دستورات آماده prepared در MySQL
بنر تبلیغاتی الف
php and MySQL

از دستورات آماده (prepared) در PHP برای مقابله با حملات SQL Injection استفاده می کنیم.

دستورات آماده و پارامتر های محدود

دستور آماده شده (prepared) یک ویژگی است که برای اجرای مکرر دستورات SQL (یا مشابه) با راندمان بالا استفاده می شود.

دستورات آماده اساساً به این صورت عمل می کنند:

    1. آماده سازی: یک قالب دستور SQL ایجاد و به پایگاه داده ارسال می شود. مقادیر معینی نامشخص باقی می مانند که به آنها پارامتر گفته می شود (با برچسب “؟”). مثال: INSERT INTO MyGuests VALUES(?, ?, ?)
    2. پایگاه داده تجزیه، کامپایل و بهینه سازی کوئری را در قالب دستور SQL انجام می دهد و نتیجه را بدون اجرای آن ذخیره می کند.
    3. اجرا: در مرحله بعدی، برنامه مقادیر را به پارامتر ها متصل می کند و پایگاه داده دستور را اجرا می کند. برنامه ممکن است دستور را هرچند بار که بخواهد با مقادیر مختلف اجرا کند.

در مقایسه با اجرای مستقیم دستورات SQL، دستورات آماده سه مزیت اصلی دارند:

  • دستورات prepared شده زمان تجزیه را کاهش می دهد زیرا آماده سازی روی کوئری فقط یک بار انجام می شود (اگرچه دستور چندین بار اجرا می شود)
  • پارامترهای Bound پهنای باند را برای سرور به حداقل می‌رسانند، زیرا شما باید هر بار فقط پارامترها را ارسال کنید و نه کل کوئری را.
  • دستورات آماده برای مقابله با حملات SQL Injection خیلی مفید است، زیرا مقادیر پارامتر ها به صورت مستقیم داخل کوئری SQL قرار نمی گیرند و شما می توانید فیلتر های امنیتی را برروی آنها لحاظ کنید.

دستورات آماده شده در MySQLi

مثال زیر از دستورات آماده شده (prepared) و پارامترهای محدود در MySQLi استفاده می کند:

مثال MySQLi همراه با دستورات prepared

تماشا در حالت تمام صفحه

توضیح در رابطه با کد های مثال بالا:

"INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"

در کوئری SQL بالا علامت سؤال (؟) را وارد کرده ایم که در نهایت مشخص می کنیم مقدار آن integer, string, double یا blob است.

اکنون به تابع bind_param() دقت کنید:

$stmt->bind_param("sss", $firstname, $lastname, $email);

این تابع پارامتر ها را به کوئری SQL متصل می کند و به پایگاه داده می گوید که چه نوع پارامتر هایی هستند. آرگومان “sss” انواع داده هایی را که مربوط به پارامتر ها هستند فهرست می کند.

کاراکتر s به mysql می گوید که این پارامتر یک رشته است.

آرگومان می تواند یکی از این چهار نوع باشد:

  • i – integer
  • d – double
  • s – string
  • b – BLOB

برای هر پارامتر باید مشخص کنیم که از چه نوع داده ای هست، با این کار تا حدودی جلوی حملات SQL Injection گرفته می شود.

توجه: باید داده هایی که به عنوان ورودی از کاربر گرفته می شود را پاکسازی و اعتبار سنجی کنیم.

دستورات آماده در PDO

مثال زیر از دستورات آماده شده و پارامترهای محدود در PDO استفاده می کند:

مثال PDO همراه با دستورات prepared


این قسمت/بخشی از محتوا مخفی شده است و فقط برای اعضای وب سایت قابل مشاهده می باشد، لطفاً با حساب کاربری وارد شوید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
بنر تبلیغاتی ج