PDA

View Full Version : سوال: آیا امکان تزریق کدهای Sql Injection در این فایل هست؟



Ali_Sedaghat
جمعه 10 خرداد 1392, 21:51 عصر
با سلام خدمت دوستان
من دارم روی یه اسکریپت توی لوکال کار می کنم. می خوام پس از تکمیل شدن این اسکریپت اونو توی هاست قرار بدم اما چند مطلب ذهن منو به خودش مشغول کرده که یکی از مهم ترینش رو در پایین از شما دوستان می پرسم.
به کد زیر دقت کنید:


$sql1 = $db->query("SELECT * FROM forms WHERE form_id = '".(int)$_GET['fid']."'");

متغیری داریم به نام fid - این متغیر شماره ی فرم مورد نظر را در مرورگر نمایش میده. وقتی که من در جلوی شماره ی فرم از کاراکتر ( ' ) استفاده می کنم هیچ مشکلی رو ایجاد نمی کنه. اما وقتی در کد بالا تابع (int) را بر می دارم بهم پیغام خطایی مبنی بر وجود اشکال در اس کیو ال میده که میشه با یه سری دستورات اطلاعات را از بانک اطلاعاتی استخراج کرد.


$sql1 = $db->query("SELECT * FROM forms WHERE form_id = '".$_GET['fid']."'");

کد بالا قابل هک شدن هست. تست کردم.

حالا می خوام بدونم آیا روشی هست که بشه تابع (int) را دور زد با وجود این که این تابع در دستور وجود داره؟ به عبارت بهتر امکانش هست که این فایل از طریق Sql Injection هک بشه؟
اگه هست از چه دستوراتی تابع int را میشه دور زد؟

ممنون می شم اگه راهنمایی کنید.
با تشکر
صداقت

engmmrj
جمعه 10 خرداد 1392, 22:46 عصر
نه امکانش نیست به دلیل اینکه برای هک کردن به روش Sql Injection نیاز به وارد کردن دستورات Sql است و دستورات Sql هم به صورت String است. که شما وقتی فقط ورودی Integer بگیری دیگه امکان هک نیست .

sh.n.n786
شنبه 11 خرداد 1392, 09:07 صبح
درود و ...
int تابع نیست کلمه کلیدیه
ببینید کد بالا درسته اما به نظر من بهتره از mysql_real_scape_string() استفاده کنید اینطوری کد ها رو حنثی میکنه و درضمن شما از mysql آپدیت شده استفاده کنید که خودش injection type های مثل ' " \ * رو بلوک کرده و همچنین دسترسی user رو از information_schema کوتاه کرده
موفق باشید

AbiriAmir
یک شنبه 12 خرداد 1392, 16:17 عصر
از تابع intval هم میتونید استفاده کنید


http://php.net/manual/en/function.intval.php