مشكل انكدينگ utf-8 با توابع فيلترينگ كاراكتر

mona.joon

Member
سلام
من براي همه داده هاي ورودي از اين توابع استفاده ميكنم
PHP:
$var = strip_tags($var);
    $var = htmlentities($var);
    $var = stripslashes($var);
    return mysql_real_escape_string($var);
به اين صورت كه اين 4تا رو توي يه فانكشن تعريف كردم و تمام ورودي ها رو توي فانكشن قرار ميدم كه اينا روش اعمال بشه ولي اگر يك رشته فارسي بذارم انكدينگش ميريزه بهم و خروجيش اين شكلي ميشه
ط´ط؛ظ„ ط´ظ…ط§ ط¨ظ‡ ط§ظٹظ† ط´ظƒظ„ ط«ط¨طھ ط´ط¯ظ‡ ظˆ ظ¾ط³ ط§ط² طھط§ط¦ظٹط¯ ظ…ط¯ظٹط±ظٹطھ ظ†ظ…ط§ظٹط´ ط¯ط§ط¯ظ‡ ط®ظˆط§ظ‡ط¯ ط´ط¯
بدون انجام اين مراحل فيلترينگ كاراكتر ها درست چاپ ميشه.
ميشه راهنمائي كنيد كه چيكار كنم كه هم امنيت درستي داشته باشم هم انكدينگم درست شه؟؟
 

ziXet

مدیر انجمن PHP/MYSQL
سلام
من براي همه داده هاي ورودي از اين توابع استفاده ميكنم
PHP:
$var = strip_tags($var);
    $var = htmlentities($var);
    $var = stripslashes($var);
    return mysql_real_escape_string($var);
به اين صورت كه اين 4تا رو توي يه فانكشن تعريف كردم و تمام ورودي ها رو توي فانكشن قرار ميدم كه اينا روش اعمال بشه ولي اگر يك رشته فارسي بذارم انكدينگش ميريزه بهم و خروجيش اين شكلي ميشه

بدون انجام اين مراحل فيلترينگ كاراكتر ها درست چاپ ميشه.
ميشه راهنمائي كنيد كه چيكار كنم كه هم امنيت درستي داشته باشم هم انكدينگم درست شه؟؟
فایل رو با انکدینگ درست ذخیره میکنی؟
 

mona.joon

Member
صفحه ها با انكدينگ utf-8 ذخيره شدن ولي براي اطمينان با notpad ++ همه رو با همين انكدينگ دوباره ذخيره كردم ولي بازم درست نشد !
يكي از ورودي هارو بدون فيلتر چاپ كردم درست فارسي چاپ شد! بخاطر همين حدس زدم شايد مشكل از اين تابع ها باشه
 

ARMIN3D.NET

New Member
دوست عزیز ، شما میتونید از این 2 تابعی که براتون میذارم استفاده کنید:

( با utf8 هم مشکلی ندارند )
PHP:
/////////////////////////
//     Sql_Cleaner     //       
/////////////////////////
function Sql_Cleaner ($Text)
{
 if ( get_magic_quotes_gpc() || get_magic_quotes_runtime()) :
      function_exists          ('mysql_real_escape_string') ?
      mysql_real_escape_string ( stripslashes ( &$Text )  ) :
      mysql_escape_string      ( stripslashes ( &$Text )  ) ;
 else :
      function_exists          ('mysql_real_escape_string') ?
      mysql_real_escape_string (&$Text) :
      mysql_escape_string      (&$Text);
 endif;
    return($Text);
}
و یا :
PHP:
//////////////////////////////
//        Safe_String       //       
//////////////////////////////
function Safe_String(
                     $Text                        , 
                     $Str_Type= 'all'             , 
                     $Str_Charset= 'ISO-8859-1'   , 
                     $Bln_SubStr= false           , 
                     $Lng_MaximumLength= 0        , 
                     $Bln_HTMLEntities= false     )
                     
{
    switch  ( strtolower ( &$Str_Type ) )
         {
          case 'english'       :
          case 'e'             : $Text  = preg_replace ( "/[^a-zA-Z]/i"       , '' , &$Text    ) ;
          break                ;

          case 'integer'       :
          case 'i'             : $Text  = preg_replace ( "/[^0-9]/i"          , '' , &$Text    ) ;
          break                ;

          case 'electronicmail':
          case 'em'            : $Text  = preg_replace ( "/[^a-zA-Z0-9.@_-]/i", '' , &$Text    ) ;
          break                ;

         }

        if    ( $Bln_SubStr )  :
                $Text  =   mb_substr    ( &$Text   ,  0  , &$Lng_MaximumLength , &$Str_Charset ) ;
        endif                  ;
        if    ( $Bln_HTMLEntities ):
                $Text  =   htmlentities ( &$Text   ,    ENT_QUOTES    ,    &$Str_Charset       ) ;
        endif                  ;
    return    ( $Text )        ;
}
 

mona.joon

Member
فكر كنم نحوهه استفاده از تابع اول به اين صورته
PHP:
$text = sql_cleaner($text);
درسته؟
ولي نحوه استفاده از تابع دوم رو هم كامل شرح بدين بي زحمت.
اگر براي كل امنيت سايت از همين 2 تابع استفاده كنم كافي هست؟
 

ARMIN3D.NET

New Member
لازمه ولی کافی نیست. مثلا برای پاکسازی هدر ها میتونی از این تابع استفاده کنی.

PHP:
//////////////////////////////
//     Safe_HTTP_Header     //       
//////////////////////////////
function Safe_HTTP_Header($Str_Charset= 'ISO-8859-1')
{
    $_SERVER['REQUEST_URI']     = htmlentities ( &$_SERVER ['REQUEST_URI']     , ENT_QUOTES    , &$Str_Charset ) ;
    $_SERVER['QUERY_STRING']    = htmlentities ( &$_SERVER ['QUERY_STRING']    , ENT_QUOTES    , &$Str_Charset ) ;
    $_SERVER['HTTP_REFERER']    = htmlentities ( &$_SERVER ['HTTP_REFERER']    , ENT_QUOTES    , &$Str_Charset ) ;
    $_SERVER['HTTP_USER_AGENT'] = htmlentities ( &$_SERVER ['HTTP_USER_AGENT'] , ENT_QUOTES    , &$Str_Charset ) ;
    $_GET     = array_change_key_case          ( array_map ('strip_tags'       , &$_GET      ) ,  CASE_LOWER   ) ;
    $_POST    = array_change_key_case          ( array_map ('strip_tags'       , &$_POST     ) ,  CASE_LOWER   ) ;
    $_REQUEST = array_change_key_case          ( array_map ('strip_tags'       ,  &$_REQUEST ) ,  CASE_LOWER   ) ;
    $_COOKIE  = array_map('strip_tags', &$_COOKIE); 
}


برای تابع دومی هم کافیه
PHP:
function Safe_String(
                     $Text                        , 
                     $Str_Type= 'all'             , 
                     $Str_Charset= 'ISO-8859-1'   , 
                     $Bln_SubStr= false           , 
                     $Lng_MaximumLength= 0        , 
                     $Bln_HTMLEntities= false     )

text = متغیر شما
Str_Type = نوع فایل ( i = عدد ، e = متن ، em = ایمیل )


امنیت مطلق نیست.
 

mona.joon

Member
مرسي
ببخشيد من مبتدي هستم درست متوجه نشدم كه چطور بايد استفاده كنم ميشه لطف كنيد با متال توضيح بديد؟
براي تابعي كه گفتيد براي پاك كردن هدر ها استفاده ميشه هم ميشه راهنمائي كنيد منو . من توي صفحه هام از هدر براي تعيين انكدينگ utf-8 استفاده ميكنم و براي ريدايركت كردن صفحه . چطور ميتونم هدر هاي صفحه رو پاك كنم بعد از استفاده از اين هدر هائي كه گفتم ؟ اگه ميشه لطف كنيد با يه مثال توضيح بديد ممنون ميشم
 

phpweb

Active Member
لازمه ولی کافی نیست. مثلا برای پاکسازی هدر ها میتونی از این تابع استفاده کنی.

PHP:
//////////////////////////////
//     safe_http_header     //       
//////////////////////////////
function safe_http_header($str_charset= 'iso-8859-1')
{
    $_server['request_uri']     = htmlentities ( &$_server ['request_uri']     , ent_quotes    , &$str_charset ) ;
    $_server['query_string']    = htmlentities ( &$_server ['query_string']    , ent_quotes    , &$str_charset ) ;
    $_server['http_referer']    = htmlentities ( &$_server ['http_referer']    , ent_quotes    , &$str_charset ) ;
    $_server['http_user_agent'] = htmlentities ( &$_server ['http_user_agent'] , ent_quotes    , &$str_charset ) ;
    $_get     = array_change_key_case          ( array_map ('strip_tags'       , &$_get      ) ,  case_lower   ) ;
    $_post    = array_change_key_case          ( array_map ('strip_tags'       , &$_post     ) ,  case_lower   ) ;
    $_request = array_change_key_case          ( array_map ('strip_tags'       ,  &$_request ) ,  case_lower   ) ;
    $_cookie  = array_map('strip_tags', &$_cookie); 
}
برای تابع دومی هم کافیه
PHP:
function safe_string(
                     $text                        , 
                     $str_type= 'all'             , 
                     $str_charset= 'iso-8859-1'   , 
                     $bln_substr= false           , 
                     $lng_maximumlength= 0        , 
                     $bln_htmlentities= false     )
text = متغیر شما
str_type = نوع فایل ( i = عدد ، e = متن ، em = ایمیل )


امنیت مطلق نیست.

من دنبال یه منبع فارسی برای آشنایی با هدرها می گردم. اگر چنین منبعی می شناسید لطفا لینکش رو برام ارسال کنید.
 

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

بالا