PDA

View Full Version : pdo و sql injection



pswin.pooya
پنج شنبه 05 دی 1392, 10:34 صبح
سلام
با بایند کردن پارامترها در PDO میشه از sql injection جلوگیری کرد؟

من یه متن html به صورت زیر رو بایند میکنم:


direction=\"rtl"\

بعدش این متن به صورت زیر ذخیره میشه:


direction=\"rtl\"

یعنی کاراکترهای فرار در نظر گرفته نمیشن و دقیقا همنجوری ذخیره میشن. اگر PDO خودش به کاراکارهایی مثل کوات ( " ) حساس نیست لازمه باز چک sql injection انجام بدیم؟

و اینکه PDO چه کاراکترهای دیگه ای رو هم در نظر نمی گیره. ( یعنی فقط محدود به کوات هست و یا نه )

MRmoon
پنج شنبه 05 دی 1392, 10:46 صبح
یعنی کاراکترهای فرار در نظر گرفته نمیشن و دقیقا همنجوری ذخیره میشن.

ميشه اينو توضيح بدي؟

با ابيند كردن پارامتر ها اون ها escape ميشن.

و كاركاكتر ها هم فك كنم در هر ديتابيس مختلف جدا هست.

pswin.pooya
پنج شنبه 05 دی 1392, 12:05 عصر
مثلا کاراکتر \، کاراکتر فرار به حساب میره. یعنی کاراکتر بعد از اون در نقش زبانیش در نظر گرفته نمیشه. مثلا:


echo "\""

خود کاراکتر " رو چاپ میکنه.

اگر pdo اینکار رو بکنه یهنی دیگه لازم نیست برای جلوگیری از sql injection خودمون \ رو قبل از " اضافه کنیم.

MRmoon
پنج شنبه 05 دی 1392, 12:40 عصر
نه خير لازم نيست.

PDO خودش اينكار رو ميكنه

a_mzadeh
پنج شنبه 05 دی 1392, 20:39 عصر
سلام؛
برای درک بهتر عملکرد pdo پیشنهاد می‌کنم query log مربوط به MySql رو فعال کنی و درخواست‌هایی که به mySql‌ ارسال میشه رو ببینی. همونطوری که شما در استفاده از pdo یک مرتبه query رو میسازی و بعد پارامترهای اون رو مشخص می‌کنی، درخواستی هم که به MySql‌ ارسال میشه شامل دو بخش هست، اول خود کوئری و دوم پارامترهای اون و به دلیل اینکه پارامترها در متن کوئری قرار نمیگیرن وجود کاراکترهایی مثل ' و یا \ مشکلی ایجاد نمی‌کنن.