یه سوال در مورد تابع get_magic_quotes_gpc

i-php-i

Active Member
اگر magic_quotes فعال باشه، موقع بازیابی مطالب ذخیره شده در پایگاه داده آیا مقادیر رو اسکیپ می کنه یا اینکه این ویژگی فقط زمانی عمل می کنه که بخوایم مقادیر رو در پایگاه داده درج کنیم؟
 
آخرین ویرایش:

Goback

Member
من موقع ذخیره مقادیر توی پایگاه داده از کد زیر استفاده می کنم.

PHP:
    if(get_magic_quotes_gpc()) {$s=stripslashes($s);}
آیا لازم هست که موقع بازیابی مقادیر از پایگاه داده مجددا از این کد استفاده کنم؟

PHP:
    if(get_magic_quotes_gpc()) {$s=stripslashes($s);}

این تابع اگر اشتباه نکنم چک میکنه که آیا خاصیت magic_quotes برای GET,POST,COOKIE فعاله یا نه،که اگر فعال باشه نیاز به استفاده از توابع addslashes و stripslashes نخواهد بود،در غیر اینصورت باید استفاده کنی،پس شکل استفاده ت اشتباشت باید اینو ببین متوجه میشی:
کد:
[COLOR=#000000][COLOR=#0000bb]<?php
[/COLOR][COLOR=#007700]echo [/COLOR][COLOR=#0000bb]get_magic_quotes_gpc[/COLOR][COLOR=#007700]();         [/COLOR][COLOR=#ff8000]// 1
[/COLOR][COLOR=#007700]echo [/COLOR][COLOR=#0000bb]$_POST[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'lastname'[/COLOR][COLOR=#007700]];             [/COLOR][COLOR=#ff8000]// O\'reilly
[/COLOR][COLOR=#007700]echo [/COLOR][COLOR=#0000bb]addslashes[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$_POST[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'lastname'[/COLOR][COLOR=#007700]]); [/COLOR][COLOR=#ff8000]// O\\\'reilly

[/COLOR][COLOR=#007700]if (![/COLOR][COLOR=#0000bb]get_magic_quotes_gpc[/COLOR][COLOR=#007700]()) {
    [/COLOR][COLOR=#0000bb]$lastname [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]addslashes[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$_POST[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'lastname'[/COLOR][COLOR=#007700]]);
} else {
    [/COLOR][COLOR=#0000bb]$lastname [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]$_POST[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'lastname'[/COLOR][COLOR=#007700]];
}

echo [/COLOR][COLOR=#0000bb]$lastname[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#ff8000]// O\'reilly
[/COLOR][COLOR=#0000bb]$sql [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#dd0000]"INSERT INTO lastnames (lastname) VALUES ('[/COLOR][COLOR=#0000bb]$lastname[/COLOR][COLOR=#dd0000]')"[/COLOR][COLOR=#007700];
[/COLOR][COLOR=#0000bb]?>[/COLOR] [/COLOR]
 

i-php-i

Active Member
این تابع اگر اشتباه نکنم چک میکنه که آیا خاصیت magic_quotes برای GET,POST,COOKIE فعاله یا نه،که اگر فعال باشه نیاز به استفاده از توابع addslashes و stripslashes نخواهد بود،در غیر اینصورت باید استفاده کنی،پس شکل استفاده ت اشتباشت باید اینو ببین متوجه میشی:
کد:
[COLOR=#000000][COLOR=#0000bb]<?php
[/COLOR][COLOR=#007700]echo [/COLOR][COLOR=#0000bb]get_magic_quotes_gpc[/COLOR][COLOR=#007700]();         [/COLOR][COLOR=#ff8000]// 1
[/COLOR][COLOR=#007700]echo [/COLOR][COLOR=#0000bb]$_POST[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'lastname'[/COLOR][COLOR=#007700]];             [/COLOR][COLOR=#ff8000]// O\'reilly
[/COLOR][COLOR=#007700]echo [/COLOR][COLOR=#0000bb]addslashes[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$_POST[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'lastname'[/COLOR][COLOR=#007700]]); [/COLOR][COLOR=#ff8000]// O\\\'reilly

[/COLOR][COLOR=#007700]if (![/COLOR][COLOR=#0000bb]get_magic_quotes_gpc[/COLOR][COLOR=#007700]()) {
    [/COLOR][COLOR=#0000bb]$lastname [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]addslashes[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$_POST[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'lastname'[/COLOR][COLOR=#007700]]);
} else {
    [/COLOR][COLOR=#0000bb]$lastname [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]$_POST[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'lastname'[/COLOR][COLOR=#007700]];
}

echo [/COLOR][COLOR=#0000bb]$lastname[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#ff8000]// O\'reilly
[/COLOR][COLOR=#0000bb]$sql [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#dd0000]"INSERT INTO lastnames (lastname) VALUES ('[/COLOR][COLOR=#0000bb]$lastname[/COLOR][COLOR=#dd0000]')"[/COLOR][COLOR=#007700];
[/COLOR][COLOR=#0000bb]?>[/COLOR] [/COLOR]

ظاهرا شما متوجه منظور من نشدید. سوال من در مورد فراخوانی مقادیر ذخیره شده در پایگاه داده هست. می خوام بدونم که اگر magic_quotes فعال باشه، اگر من مقادیر رو از پایگاه داده بازیابی کنم، آیا باز هم این تابع مقادیر رو اسکیپ می کنه یا نه؟

در مورد تابع زیر هم باید بگم که کلا
magic_quotes برای افرادی هست که تازه کار هستند و با هیچ اصول امنیتی آشنایی ندارن وبرنامه نویسهای با تجربه تر این ویژگی رو غیر فعال می کنن و از توابع خودشون استفاده می کنن.من ادامه تابع رو توی پست قرار ندادم.

من اصلا با
magic_quotes کار نکردم، سوالم اینه که آیا این تابع فقط در زمان ذخیره مقادیر در پایگاه داده عمل می کنه یا اینکه در زمان بازیابی مقادیر از پایگاه داده هم مقادیر رو اسکیپ می کنه؟


 

Goback

Member
چرا من سوالت رو متوجه شدم،مثال رو یه بار دیگه بخونی جوابتو میگیری ولی:
این تابع دو مقدار برمیگردونه 1 و 0،اگر 1 باشه یعنی خاصیت magic_quotes_gpc تو تنظیمات پی اچ پی فعاله و اگر نه که یعنی نیست،این از این.
خب اگه فعال نباشه چی میشه؟
اگه فعال نباشه یعنی اگر من مقدار
کد:
v'ar
رو وارد کردم،اصلا کوئری اجرا نمیشه،همینجاست که مبحث Sql Injection iهم میاد وسط و اگه بخوایم ذخیره شه (و هم از بعضی حملات تزریقی جلوگیری کنیم)از تایع addslashes استفاده میکنیم،که اینجوری ذخیره میشه:
کد:
v'ar
یعنی با یه اسلش قبل از بعضی کاراکترها به MYSQL ارسال میشه و اون عملیات مربوط خودشو انجام میده.
تو این روش برای بازخوانی اطلاعات از stripcslashes باید استفاده کنیم.
-خب اگه فعال باشه چی میشه؟
اگه فعال باشه و مقدار
کد:
v'ar[]
ارسال بشه،ذخیره میشه و میره تو دیتابیس،همونطور که اینجا از تابع اضافه کردن اسلش استفاده نمیکنیم و تابع مجیک خودش انجام میده،از تابع برداشتن اسلش هم استفاده نمیکنیم.
---
کم و کاستی داشت دوستان برطرف نمایند.
 

جدیدترین ارسال ها

بالا