سلام دوستان.وقت بخیر
من یک سایتی نوشتم که داخل صفحات از get و post استفاده میکنم. به عنوان مثالی یکی از صفحاتم به این صورت هست. www.domain.comblog.php?id=1
حالا وقتی که این id رو میگیرم و از طریق php میفرستم به فانکشنی که باهاش از دیتابیس فراخونی میکنم ولی قبلش میام با یک فانکشن دیگه که نوشتم اون مقدار id رو چک میکنم. به این صورت:
به عنوان مثال این قسمت select من هست
select * fron tbl_blog where id={$database->escape_value($id)}
حالا با تابع escape_value هم که داخل کلاس database هست میام همون مقدار id رو چک میکنم به این صورت عمل میکنه
public function escape_value($value) {
if ($this->real_escape_string_exists) {
if ($this->magic_quotes_active) {
$value = stripslashes($value);
}
$value = mysqli_real_escape_string($this->connection, $value);
} else {
if (!$this->magic_quotes_active) {
$value = addslashes($value);
}
}
return $value;
}
ولی باز با این حال مشکل sql injection دارم و یک هکری هم به ما پیام داد که دسترسی به دیتابیس های ما وجود داره و با sqlmap لیست دیتابیس های مارو فرستاده بود.
من چطوری میتونم جلوی این مشکل رو بگیرم. ممنون میشم راهنمایی بفرمایین.
سلام
اگر id از نوع عددی است اول توی کد فیلترش کن ، یعنی اگه غیر از عدد بود درخواست رو رد کن
بعد هم تمامی کارکترها و عبارت هایی که توی sql معنی دارن رو فیلتر کن
ممنون از شما بابت راهنمایی
بله آنهایی که int هستند رو دارم همین کار رو میکنم. ولی باری اونهایی که کاراکتر هست نمیدونم چی کار باید کنم.
میشه راجع به فیلتر کردن کاراکترهای خاص یکم بیشتر توضیح بدین.ممنون
با سلام خدمت شما
این لینک رو مشاهده کنید
https://www.cloudways.com/blog/protect-php-website-sql-injection/
سلام
باید تمامی کارکترهایی که توی sql معنی دارن مثل ' یا " یا % و الی آخر رو محدود کنی. همچنین عبارتهایی مثل select ، update ، delete و یا عبارتهای مشابه رو هم محدود کنی. در کل عبارتی که به پایگاه داده ارسال میشه باید
همون چیزی باشه که انتظار هست. ببینید مثلا اگر یک ' داخل عبارت ارسالی به پایگاه داده باشه ، query کلا عوض میشه
filter_var($_POST['Name'], FILTER_SANITIZE_STRING);
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)