راکت
حل شده

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

17 پاسخ

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

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

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

ثبت پرسش جدید

پاسخ‌ها

17
محمد معین بابائی
محمد معین بابائی
@moeinbabaei

تخصص: Web developer

بهترین پاسخ

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

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

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

امیر علی
امیر علی
@ajdar9667

تخصص: طراح و توسعه دهنده fullstack

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

امیر علی
امیر علی
@ajdar9667

تخصص: طراح و توسعه دهنده fullstack

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

شاید پاسخ شما همین‌جا باشد

امیر علی
امیر علی
@ajdar9667

تخصص: طراح و توسعه دهنده fullstack

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

محمد معین بابائی
محمد معین بابائی
@moeinbabaei

تخصص: Web developer

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

سبحان مولایی
سبحان مولایی
@websaz

تخصص: برنامه‌نویس وب: Python :: Django :: Node :: Php :: Laravel :: JS :: React :: React Native

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

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

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

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

امیر علی
امیر علی
@ajdar9667

تخصص: طراح و توسعه دهنده fullstack

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

امیر علی
امیر علی
@ajdar9667

تخصص: طراح و توسعه دهنده fullstack

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

محمد معین بابائی
محمد معین بابائی
@moeinbabaei

تخصص: Web developer

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

محمد معین بابائی
محمد معین بابائی
@moeinbabaei

تخصص: Web developer

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

محمد معین بابائی
محمد معین بابائی
@moeinbabaei

تخصص: Web developer

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

امیر علی
امیر علی
@ajdar9667

تخصص: طراح و توسعه دهنده fullstack

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

سبحان مولایی
سبحان مولایی
@websaz

تخصص: برنامه‌نویس وب: Python :: Django :: Node :: Php :: Laravel :: JS :: React :: React Native

بله می توان با 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();
علیرضا کفایتی
علیرضا کفایتی
@alirezakefayati

تخصص: برنامه نویس laravel, vue.js

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

محمد معین بابائی
محمد معین بابائی
@moeinbabaei

تخصص: Web developer

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

محمد معین بابائی
محمد معین بابائی
@moeinbabaei

تخصص: Web developer

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

سبحان مولایی
سبحان مولایی
@websaz

تخصص: برنامه‌نویس وب: Python :: Django :: Node :: Php :: Laravel :: JS :: React :: React Native

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

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

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