سلام دوستان وقت بخیر
به یه باگ خوردم که مثلا در متد GET اگر در URL از ' یا " استفاده شه باعث بروز باگ میشه من قبلا با بررسی داده این مشکل رو در پی اچ پی حل می کردم خواستم این سوال رو بپرسم تا شاید راه جدیدی رو پیدا کردیم.
مثال این باگ :
https://domain.ir/post.php?id=%27
اگر بعد id از تک کوتیشن یا دابل کوتیشن استفاده کنیم مشکل میشه
لطفا راهنمایی کنید
@hesammousavi
@websaz
@ajdar9667
@rezajahangir
@samanzdev
@milad
پس نتیجه این شد که بهتره از PDO استفاده کنیم و امنیت بیشتری داره البته استفاده از فریمورک های php بهتره و صد در صد امنیت بیشتری داره.
*ولی اگر کسی از روش mysqli هم بره باید اعتبار سنجی کنه
مرسی از دوستان عزیز:
@websaz
@ajdar9667
@gomnam
برای رفعش شما دو راه داری :
راه یک این است که مقادیر رو اعتبارسنجی کنی ببینی مقادیر عیر مجاز داره یا نه و اکه مثلا تز مقادیر غیر مجازی مثله همین کوتیشن استفاده کرد اون رو ریدایرکت کن یا بهش اخطار نشون بده
راه دوم این هست که مقادیر رو به صورت مستقیم وارد کویری دیتابیس نکن مثلا کده این صفحه ای که گزاشتید یک کویری داره میگرده در دیتابیس ببینه چنین ایدی برای پست ها هست یانه که اگه مستقیم بخای مقدار گرفته شده از طریق Get رو بهش بدی باگه گفته شده رو داری که میتونی در باره این روش دوم یکم سرچ کنی و تمام!
@ajdar9667
مرسی مفید بود برای اعتبار سنجی کوتیشن از چه کدی استفاده کنم ؟!
و اینکه فقط کوتیشن باعث به وجود اومدن این باگ میشه؟!
سلام sql injection یک نوع باگ هست که هکر مثلا sql پاک کردن یک table رو به سایت تزریق کنید. توضیحات کامل برای جلوگیری از اون باید از pdo استفاده کنید. مانند:
$stmt = $pdo->prepare('SELECT * FROM users WHERE name = :name');
$stmt->execute([ 'name' => $name ]);
البته در فریمورک های php این باگ حل شده و امنیت ان نسبت به php بسیار بیشتر هست.
همونطور که دوستمون گفتن در PDO میتونین از اون روش استفاده کنین اگر از mysqli استفاده میکنین بگید تا روش اون رو هم بگم
@ajdar9667
من از mysqli استفاده می کنم ولی اشتباه کردم کاش از اول پروژه رو با pdo جلو می رفتم
برای mysqli چه کار باید کرد
بله می توان با 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();
pdo امن ترین راه در php pure است . بهتره از همین راه استفاده کنید
و بعد از آن باید از فریمورک های php لاراول استفاده کنید .
@websaz
بله مطالعه شد اما یه سوالی دارم با روش MySQLi Object-oriented میشه از دستورات mysqli استفاده کرد؟ چون بعضی دستورات رو من نمی تونم با pdo پیاده سازی کنم واسه همین از mysqli استفاده می کنم ؟
اگه میشه جواب بدین
pdo کتابخانه کاملی هست و تمامی کارهایی که با mysqli میشه انجام داد رو پشتیبانی می کنه تفاوت MySQLi Procedural و MySQLi Object-oriented این هست که در نوع object oriented کارها به صورت شی گرا انجام میشه اما در نوع عادی به صورت functional ولی سیستم شی گرا بسیار از functional بهتر و راحتر هست.
پس نتیجه این شد که بهتره از PDO استفاده کنیم و امنیت بیشتری داره البته استفاده از فریمورک های php بهتره و صد در صد امنیت بیشتری داره.
*ولی اگر کسی از روش mysqli هم بره باید اعتبار سنجی کنه
مرسی از دوستان عزیز:
@websaz
@ajdar9667
@gomnam
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟