PDA

View Full Version : آموزش: عدم استفاده از GET_$ جهت دسترسی به متغیرهای ارسالی



Sajjad.Aghapour
دوشنبه 21 تیر 1389, 10:43 صبح
سلام دوستان
چندوقتی هست که وقت نکردم به PHP سری بزنم.ولی این مطلب رو دیدم و چون دیدم قبلا هم در این مورد بحث شده بود بگذارم....

تاحالا خیلی در مورد استفاده از GET_$ و POST_$ برای دسترسی به متغیرهای ارسالی یک فرم و امنیت اونها بحث شده.شاید اصلا استفاد از GET_$ پیشنهاد نشه(در حقیقت پیشنهاد نمیشه).اما امکانی که در PHP 5.2 اضافه شده جهت اعتبار سنجی و اصولی سازی این دسترسی تابع filter_input هستش که این امکان رو با پارامترهای گوناگون برای شما فراهم خواهد کرد.

Never Use $_GET Again عنوان همین مطلب در این سایت (http://www.phparch.com) است که این مطلب (http://www.phparch.com/2010/07/08/never-use-_get-again/) رو تشریح کرده...

موفق باشید/

h.alizadeh
سه شنبه 22 تیر 1389, 18:51 عصر
سلام،ممنون

من تازه php شروع کردم.

آیااینجوری استفاده کردند از متغیرهای POSt وGET

mysql_real_escape_string ($_POST[rdsex])

معادل با همین دستور بالای شما هست؟

و اینکه در مقاله اومده اگر نمی خوایم داده ها فیلتر بشه از این دستور استفاده کنیم:
$unfiltered_data = filter_input(FILTER_GET, ‘unfiltered_data’, FILTER_UNSAFE_RAW);

آیا در این جا که حالت فیلترنشده است تفاوتی هست از اینکه اصلا از این دستور استفاده نکنیم و به شیوه معمول و ساده :
$_POST['fname']
استفاده کنیم؟

Sajjad.Aghapour
چهارشنبه 23 تیر 1389, 10:14 صبح
آیااینجوری استفاده کردند از متغیرهای POSt وGET

mysql_real_escape_string ($_POST[rdsex])

معادل با همین دستور بالای شما هست؟

شما ممکن هست راه های متفاوتی برای این کار داشته باشید.برای مثال:
شما ممکن هست با استفاده از Regular Expression یک عدد که معرف یک ID هست رو بررسی کنید و Sanitize کنید:

$id= preg_replace('/[^0-9]/', '', $_REQUEST['id']);

و یا ممکن هست به شکل زیر این کار رو انجام بدید:

$id = filter_input(INPUT_GET, "id", FILTER_SANITIZE_NUMBER_INT);




و اینکه در مقاله اومده اگر نمی خوایم داده ها فیلتر بشه از این دستور استفاده کنیم:
$unfiltered_data = filter_input(FILTER_GET, ‘unfiltered_data’, FILTER_UNSAFE_RAW);

آیا در این جا که حالت فیلترنشده است تفاوتی هست از اینکه اصلا از این دستور استفاده نکنیم و به شیوه معمول و ساده :
$_POST['fname']
استفاده کنیم؟

در عمل هیچ تفاوتی باهم نخواهند داشت....

h.alizadeh
پنج شنبه 24 تیر 1389, 02:03 صبح
ممنونم،
برای mysql_real_escape_string باید مثکه magic_quotes_gpc برابر offباشه.
ولی برای filter_inputمحدودیتی نیست،پس بهتره. :)

bravia2009
پنج شنبه 24 تیر 1389, 09:12 صبح
سلام دوستان
چندوقتی هست که وقت نکردم به PHP سری بزنم.ولی این مطلب رو دیدم و چون دیدم قبلا هم در این مورد بحث شده بود بگذارم....

تاحالا خیلی در مورد استفاده از GET_$ و POST_$ برای دسترسی به متغیرهای ارسالی یک فرم و امنیت اونها بحث شده.شاید اصلا استفاد از GET_$ پیشنهاد نشه(در حقیقت پیشنهاد نمیشه).اما امکانی که در PHP 5.2 اضافه شده جهت اعتبار سنجی و اصولی سازی این دسترسی تابع filter_input هستش که این امکان رو با پارامترهای گوناگون برای شما فراهم خواهد کرد.

Never Use $_GET Again عنوان همین مطلب در این سایت (http://www.phparch.com) است که این مطلب (http://www.phparch.com/2010/07/08/never-use-_get-again/) رو تشریح کرده...

موفق باشید/
سلام دوست من . با تشکر از مطلب مفیدت
یک چند تا سوال در مورد $_get داشتم
1. ایا برای صدا زدن متغییر از دیتا بیس میتونیم از اون استفاده کنیم ؟
2. ایا برای صدا زدن از فرم میشه از اون استفاده کرد ؟
3. فرقش با request در چیه ؟
4. فرقش با post در چیه ؟

Sajjad.Aghapour
پنج شنبه 24 تیر 1389, 15:35 عصر
سلام دوست من . با تشکر از مطلب مفیدت
یک چند تا سوال در مورد $_get داشتم
1. ایا برای صدا زدن متغییر از دیتا بیس میتونیم از اون استفاده کنیم ؟
2. ایا برای صدا زدن از فرم میشه از اون استفاده کرد ؟
3. فرقش با request در چیه ؟
4. فرقش با post در چیه ؟


منظورتون چیه که برای صدا زدن متغیر از دیتابیس و فرم میشه از اون استفاده کرد؟ اینها Super-Global variable هایی هستند که برای گرفتن مقادیر به صورت Query String و Built-In استفاده میشن....

تفاوت اونها با کارایی اونهاست.اگر در این زمینه جستجو کنید مقالات مفیدی دستگیرتون خواهد شد.(یه نگاه به این مقاله (http://www.alternateinterior.com/2007/01/what-is-_request.html) بندازید)

در هر صورت برای استفاده از اونها باید دقت لازم رو به خرج بدید تا اسیر آسیب پذیری هایی از قبیل SQLInjection و RFI نشید...استفاده از filter_input این نگرانی ها را تاحدی مرتفع خواهد کرد....

موفق باشید/

پ.ن: لطفا سوال خود را در تاپیکی جداگانه مطرح کنید