علیرضا تحریری
4 سال پیش توسط علیرضا تحریری مطرح شد
6 پاسخ

sql injection در PHP

سلام دوستان من یک سوالی دارم چطوری میتونم از حملات SQL INJECTION در PHP جلوگیری کنم.
خودم اینو نوشتم نمیدونم امن هست یا نه؟

<?php

$database = array();
$database['HOSTNAME'] = "localhost";
$database['USERNAME'] = "root";
$database['PASSWORD'] = "root";
$database['DATABASE'] = "mimoc";

$connect = new mysqli($database['HOSTNAME'], $database['USERNAME'], $database['PASSWORD'], $database['DATABASE']);

if ($connect->connect_errno) {
    echo "Failed connect to MYSQL: ( " . $connect->connect_errno . " ) " . $connect->connect_error;
}

$id = $_GET['id'];
$id_ok = filter_var($id, FILTER_SANITIZE_NUMBER_INT);

if (is_numeric($id_ok)) {

$query = $connect->query("SELECT * FROM users WHERE user_id={$id_ok}");

    while ($row = mysqli_fetch_array($query)) {
        echo "";
        print_r($row);
        echo "";
    }

}

var_dump($query);

ثبت پرسش جدید
سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 4 سال پیش مطرح شد
1

@alirezatahriri سلام .
من در حد دانش خودم راهنمایی میکنم اما قطعا دوستان باتجربه تر میتونن بهتر راهنمایی کنن .
تا اونجایی که من میدونم استفاده از PDO بجای روش های قدیمی تر مثل mysqli توصیه میشه . چه با mysqli چه PDO باید سعی بکنید از prepared query ها استفاده بکنید . در واقع با متد prepare کوئری رو آماده اجرا کنید :

Prepared Statements eliminate any possibility of SQL Injection in your web application. No matter what is passed into the $_GET variables here, the structure of the SQL query cannot be changed by an attacker (unless, of course, you have PDO::ATTR_EMULATE_PREPARES enabled, which means you're not truly using prepared statements).

البته برای اعتبار سنجی های احتمالی، روش فیلتر کردن و sanitize که خودتون هم بکار بردین میتونه تاثیر گذار باشه.

این هم همین مقاله ای که قسمتیش رو عنوان کردم : مقاله
موفق باشید 🌹


علیرضا تحریری
تخصص : لاراول، لایوایر و Tailwind css
@alirezatahriri 4 سال پیش مطرح شد
1

سلام @SobhanDadkhah خیلی ممنون از کمکتون


علیرضا تحریری
تخصص : لاراول، لایوایر و Tailwind css
@alirezatahriri 4 سال پیش مطرح شد
0

از کسی پرسیدم که اگر از PDO استفاده کنی هنگام خواندن اطلاعات از پایگاه داده هم میتونی از query استفاده کنی و هم prepare.
میخواستم ببینم که از هر دو میشه برای خواندن اطلاعات استفاده کرد


احسان قربانی
تخصص : PHP ، در حال یادگیری لاراول ،...
@TimeRunner2359 4 سال پیش آپدیت شد
0

@alirezatahriri
سلام و وقت بخیر
برای فریمورک ها که بحثی نیست .
برای PHP خام هم توصیه میکنم اگر انگلیس‌تون خوبه ، این لینک رو یه نگاهی بیندازید :

موفق و سلامت باشید
یا حق


احسان قربانی
تخصص : PHP ، در حال یادگیری لاراول ،...
@TimeRunner2359 4 سال پیش مطرح شد
0

https://phpsecurity.readthedocs.io/en/latest/Injection-Attacks.html#sql-injection
ده بار ویرایش کردم ولی لینک رو نگذاشت 😅


علیرضا تحریری
تخصص : لاراول، لایوایر و Tailwind css
@alirezatahriri 4 سال پیش مطرح شد
0

خیلی ممنون از راهنماییتون @TimeRunner2359.


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

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