محمد معین بابائی
3 سال پیش توسط محمد معین بابائی مطرح شد
17 پاسخ

جلوگیری از باگ امنیتی

سلام دوستان وقت بخیر
به یه باگ خوردم که مثلا در متد GET اگر در URL از ' یا " استفاده شه باعث بروز باگ میشه من قبلا با بررسی داده این مشکل رو در پی اچ پی حل می کردم خواستم این سوال رو بپرسم تا شاید راه جدیدی رو پیدا کردیم.

مثال این باگ :
https://domain.ir/post.php?id=%27
اگر بعد id از تک کوتیشن یا دابل کوتیشن استفاده کنیم مشکل میشه

لطفا راهنمایی کنید
@hesammousavi
@websaz
@ajdar9667
@rezajahangir
@samanzdev
@milad


ثبت پرسش جدید
محمد معین بابائی
تخصص : Web developer
@moeinbabaei 3 سال پیش مطرح شد
0

پس نتیجه این شد که بهتره از PDO استفاده کنیم و امنیت بیشتری داره البته استفاده از فریمورک های php بهتره و صد در صد امنیت بیشتری داره.

*ولی اگر کسی از روش mysqli هم بره باید اعتبار سنجی کنه

مرسی از دوستان عزیز:
@websaz
@ajdar9667
@gomnam


امیر علی
تخصص : طراح و توسعه دهنده fullstack
@ajdar9667 3 سال پیش مطرح شد
0

خب عزیزم این باگ رو بهش میگن اسکیوال اینجکشن یا sql injection


امیر علی
تخصص : طراح و توسعه دهنده fullstack
@ajdar9667 3 سال پیش مطرح شد
0

به زبون خودمون یعنی تزریق sql یا کویری ناخاسته به دیتابیس


امیر علی
تخصص : طراح و توسعه دهنده fullstack
@ajdar9667 3 سال پیش مطرح شد
0

برای رفعش شما دو راه داری :
راه یک این است که مقادیر رو اعتبارسنجی کنی ببینی مقادیر عیر مجاز داره یا نه و اکه مثلا تز مقادیر غیر مجازی مثله همین کوتیشن استفاده کرد اون رو ریدایرکت کن یا بهش اخطار نشون بده
راه دوم این هست که مقادیر رو به صورت مستقیم وارد کویری دیتابیس نکن مثلا کده این صفحه ای که گزاشتید یک کویری داره میگرده در دیتابیس ببینه چنین ایدی برای پست ها هست یانه که اگه مستقیم بخای مقدار گرفته شده از طریق Get رو بهش بدی باگه گفته شده رو داری که میتونی در باره این روش دوم یکم سرچ کنی و تمام!


محمد معین بابائی
تخصص : Web developer
@moeinbabaei 3 سال پیش مطرح شد
0

@ajdar9667
مرسی مفید بود برای اعتبار سنجی کوتیشن از چه کدی استفاده کنم ؟!
و اینکه فقط کوتیشن باعث به وجود اومدن این باگ میشه؟!


سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش آپدیت شد
0

سلام sql injection یک نوع باگ هست که هکر مثلا sql پاک کردن یک table رو به سایت تزریق کنید. توضیحات کامل برای جلوگیری از اون باید از pdo استفاده کنید. مانند:

 $stmt = $pdo->prepare('SELECT * FROM users WHERE name = :name');

 $stmt->execute([ 'name' => $name ]);

البته در فریمورک های php این باگ حل شده و امنیت ان نسبت به php بسیار بیشتر هست.


امیر علی
تخصص : طراح و توسعه دهنده fullstack
@ajdar9667 3 سال پیش آپدیت شد
0

همونطور که دوستمون گفتن در PDO میتونین از اون روش استفاده کنین اگر از mysqli استفاده میکنین بگید تا روش اون رو هم بگم


امیر علی
تخصص : طراح و توسعه دهنده fullstack
@ajdar9667 3 سال پیش آپدیت شد
0

اگر به پاسختون هم رسیدین پاسخ برتر رو انتخاب کنین!


محمد معین بابائی
تخصص : Web developer
@moeinbabaei 3 سال پیش مطرح شد
0

@ajdar9667
من از mysqli استفاده می کنم ولی اشتباه کردم کاش از اول پروژه رو با pdo جلو می رفتم
برای mysqli چه کار باید کرد


محمد معین بابائی
تخصص : Web developer
@moeinbabaei 3 سال پیش مطرح شد
0

مرسی از دوست عزیز
@websaz


محمد معین بابائی
تخصص : Web developer
@moeinbabaei 3 سال پیش مطرح شد
0

@ajdar9667
@websaz
اگر به جای pdo از روش MySQLi Object-oriented برم این باگ بر طرف میشه؟


امیر علی
تخصص : طراح و توسعه دهنده fullstack
@ajdar9667 3 سال پیش مطرح شد
0

این اموزش رو از اقای موسوی ببین خیلی مفیده برای mysqli هم هست !
عنوان لینک مورد نظر


سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
1

بله می توان با MySQLi Object-oriented این باگ رو رفع کرد اما توصیه من استفاده از PDO هست. در وبسایت w3schools نحوه استفاده از mysqli و pdo کاملا توضیح داده شده. و به این شکل این باگ رفع می شود. (توضیحات کامل)

$stmt = $mysqli->prepare("SELECT * FROM myTable WHERE name = ? AND age = ?");
$stmt->bind_param("si", $_POST['name'], $_POST['age']);
$stmt->execute();

$stmt->close();

علیرضا کفایتی
تخصص : برنامه نویس laravel, vue.js
@alirezakefayati 3 سال پیش آپدیت شد
0

pdo امن ترین راه در php pure است . بهتره از همین راه استفاده کنید
و بعد از آن باید از فریمورک های php لاراول استفاده کنید .


محمد معین بابائی
تخصص : Web developer
@moeinbabaei 3 سال پیش مطرح شد
0

@ajdar9667
مرسی واقعا استاد موسوی عالی توضیح دادن
@hesammousavi


محمد معین بابائی
تخصص : Web developer
@moeinbabaei 3 سال پیش مطرح شد
0

@websaz
بله مطالعه شد اما یه سوالی دارم با روش MySQLi Object-oriented میشه از دستورات mysqli استفاده کرد؟ چون بعضی دستورات رو من نمی تونم با pdo پیاده سازی کنم واسه همین از mysqli استفاده می کنم ؟
اگه میشه جواب بدین


سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
-1

pdo کتابخانه کاملی هست و تمامی کارهایی که با mysqli میشه انجام داد رو پشتیبانی می کنه تفاوت MySQLi Procedural و MySQLi Object-oriented این هست که در نوع object oriented کارها به صورت شی گرا انجام میشه اما در نوع عادی به صورت functional ولی سیستم شی گرا بسیار از functional بهتر و راحتر هست.


محمد معین بابائی
تخصص : Web developer
@moeinbabaei 3 سال پیش مطرح شد
0

پس نتیجه این شد که بهتره از PDO استفاده کنیم و امنیت بیشتری داره البته استفاده از فریمورک های php بهتره و صد در صد امنیت بیشتری داره.

*ولی اگر کسی از روش mysqli هم بره باید اعتبار سنجی کنه

مرسی از دوستان عزیز:
@websaz
@ajdar9667
@gomnam


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام