PDA

View Full Version : سوال: اگر اسم فیلدهای فرم رو با اسم ستونهای موجود در دیتابیس یکی بگیرم، مشکل امنیتی ایجاد می شه؟



idocsidocs
دوشنبه 18 اردیبهشت 1391, 11:30 صبح
من برای بالابردن سرعت کار، معمولا اسم فیلدهای فرم رو با اسم ستوننهای موجود در جدول یکی می گیرم.

آیا این کار مشکل امنیتی ایجاد می کنه؟

MMSHFE
دوشنبه 18 اردیبهشت 1391, 15:25 عصر
اگه قبل از استفاده از متغیرها با isset‌ چک کنید که موجود باشن و بعد ازشون استفاده کنید، مشکل خاصی پیش نمیاد چون خطایی به نمایش در نخواهد آمد که اطلاعات خاصی رو لو بده. مثلاً در کد زیر:


if($_POST['pass'] == 'abcd') {
echo 'Success';
}

اگه صفحه فوق مستقیماً ازطریق آدرس بار درخواست بشه، پیغام خطای 'Undefined Index 'pass رو دریافت خواهید کرد که بخاطر این هست که آرایه POST_$ اندیسی به نام pass نداره (چون اصلاً چیزی برای صفحه post نشده). در اینجا علاوه بر ضعف طراحی که باعث پیغام خطای Debugger شده، بخشی از ساختار دیتابیس شما که نام فیلدتون هست هم فاش شده. کد فوق رو میشه اینطوری بهینه سازی کرد:


if(isset($_POST['pass'] && $_POST['pass'] == 'abcd') {
echo 'Success';
}

دقت کنید که وجود && باعث میشه اگه شرط اول برقرار نباشه، دومی اصلاً چک نشه و لذا پیغام خطایی دریافت نخواهید کرد. البته اگه از & استفاده کنید، دومی هم ارزیابی میشه و باز خطا خواهید داشت و بجای اینکار باید کل if رو داخل یک if دیگه بگذارین که چک میکنه مقدار pass به روش post ارسال شده یا نه و بعد شرط دوم رو بررسی میکنه.
موفق باشید.

idocsidocs
دوشنبه 18 اردیبهشت 1391, 15:38 عصر
اگه قبل از استفاده از متغیرها با isset‌ چک کنید که موجود باشن و بعد ازشون استفاده کنید، مشکل خاصی پیش نمیاد چون خطایی به نمایش در نخواهد آمد که اطلاعات خاصی رو لو بده.
البته من فقط می خوام بدونم که این کار (استفاده از اسم ستونهای دیتابیس به عنوان فیلدهای فرم) اصولی و استاندارد هست یا نه؟

alonemm
دوشنبه 18 اردیبهشت 1391, 16:24 عصر
البته من فقط می خوام بدونم که این کار (استفاده از اسم ستونهای دیتابیس به عنوان فیلدهای فرم) اصولی و استاندارد هست یا نه؟

باسلام:

از نظر استاندارد در این خصوص مشکلی نداره اما برای درک بهتر و اشتباه نگرفتن نام ستون ها با نام فیلدها 1 فرق کوچک یا یک اسم خاص بهشون اضافه کنید.