Регистрирайте се безплатно, за да използвате услугите на сайта! | Вход
Начало Новини ИТ Работа Форум Видео Уроци Скриптове WiFi точки MyLinks Mytech Още


Нова тема
Относно mysql_real_escape_string
Тази тема е погледната 416 пъти
Добави темата към любими | Принтирай темата | Нова тема 
Публикувано на: 10.08.2008 16:50
bourev
Калфа

Мнения: (15)

Привет.
Досега винаги съм използвал addslashes, но тъй като повечето отзиви са в полза на mysql_real_escape_string, реших да го използвам в един проект.
Питането ми е следното - как точмно действа тази функция и добавя ли реално в базата наклонени черти пред " ?
Защото като пусна някой стринг през mysql_real_escape_string и му дам да ми го визуализира в браузъра преди записа в базата данни , е с наклонени черти. А после в базата данни те липсват?
И ако добавя черти - с коя функция да се трият при четене от базата?

Предварително благодаря на всички


 
---------------------------
Потребител от: 27.07.06 | Всички уроци от bourev | Всички скриптове от bourev
напиши eMail напиши лично съобщение виж профила на bourev
Публикувано на: 10.08.2008 19:33
po_taka
Ронин

Мнения: (201)

mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.


stripslashes премахва чертите


 
---------------------------
Потребител от: 15.04.08 | Всички уроци от po_taka | Всички скриптове от po_taka

http://www.tekstove.info/ дайте някви идеи кво да го права тва нещо
напиши eMail напиши лично съобщение виж профила на po_taka
Публикувано на: 10.08.2008 23:05
bourev
Калфа

Мнения: (15)

Ясно, но проблема при мен е, че в базата данни наклонената черта липсва пред тези символи. А в браузъра ми дава, че функцията ги поставя.
Някакви идеи?
Благодаря


 
---------------------------
Потребител от: 27.07.06 | Всички уроци от bourev | Всички скриптове от bourev
напиши eMail напиши лично съобщение виж профила на bourev
Публикувано на: 10.08.2008 23:34
po_taka
Ронин

Мнения: (201)

Чертите се добавят , за да се предотврати SQL инжексия,
а в базата се записват без черти.
Като в ехо-то echo"123\"456"; , да добавяш специални символи.


Ще ти отговора , като цитирам 2 поста от булфорум




name='tedy' date='Jun 30 2008, 22:04' post='1495162992'
Като начало Винаги ънескейпвай входящите параметри от $_POST/$_GET.
А дали да го направиш това се проверява с get_magic_quotes_gpc(). Това е една адски тъпа опция на php.ini, която много дразни. Защо по дяволите за всеки реяукест енджина трябва да предполага, че ще искам да вкарвам в БД, при това с addslashes() ?! Че и на доста хостове е включено тва.
Понеже по default ПХП е настроен (май последните версии не беше така..) автоматично да изпълнява addslashes() върху входните данни. И ти с mysql_real_escape_string() му правиш допълнителен ескейпинг. Познай на 3 наклонени черти двойното ескейпване до колко черти води в крайна сметка :) .

Още в началото ако get_magic_quotes_gpc() върне Труе, тогава правиш stripslashes() на $_POST променливата. После я мъсялреалесцапестринг-ваш и т.н.

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    private static function _remove_magic_quotes($s) {
       
if (get_magic_quotes_gpc()) return stripslashes($s);
       
return $s;
   
}

   
public static function getString($p, $d=false) {
       
if (isset($_REQUEST[$p])) {
           
$ret = self::_remove_magic_quotes($_REQUEST[$p]);
           
if (APP_IS_UTF8 && !Strings::isASCII($ret) && !Strings::utf8IsValid($ret)) $ret = $d;
       
} else {
           
$ret = $d;
       
}
       
return $ret;
   
}
Аз ползвам нещо такова в един клас. Редът с APP_IS_UTF8 за мен е legacy, понеже приложението може и да не е utf8, за някакви стари неща, игнорирай го.

Така получавам 'неопетнен' параметъра и нататък нормално си го escape-вам (ако ще влиза в БД).


name='karaman' date='Jul 1 2008, 08:22' post='1495163054'
не си разбрал правилно, ти правиш strip_slashes на изхода от mysql, а не трябва. При включен magic GPC (Get/Post/Cookie) strip_slashes се прави на входа на PHP скрипта, а после се прави mysql_real_escape_string на данните, които записвате в SQL


 
Това мнение е редактирано от po_taka на 10.08.2008 23:36
---------------------------
Потребител от: 15.04.08 | Всички уроци от po_taka | Всички скриптове от po_taka

http://www.tekstove.info/ дайте някви идеи кво да го права тва нещо
напиши eMail напиши лично съобщение виж профила на po_taka
Публикувано на: 11.08.2008 00:09
bourev
Калфа

Мнения: (15)

Най-напред - благодаря ти за отговорите.
всъщност, използвам следната функция, която чисти добавените черти при включена get_magic_quotes_gpc():
 CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function mysql_clean( $value )
    {
       
$magic_quotes_active = get_magic_quotes_gpc();
       
$real_escape_active = function_exists( "mysql_real_escape_string" );
       
if( $real_escape_active )
        {
           
if( $magic_quotes_active )
            {
               
$value = stripslashes( $value );
           
}
           
$value = mysql_real_escape_string( $value );
       
}
       
else
       
{
           
if( !$magic_quotes_active )
            {
               
$value = addslashes( $value );   
          
}     
        }
       
return $value;           
   
}
На мен притеснението ми идва от факта, че addslashes добавя чертите в базата данни, а при  mysql_real_escape_string - не.
Значи да те разбирам, че това е разликата между двете функции - mysql_real_escape_string добавя черти за да предпази от SQL инжексия, а в базата си записва нормален стринг - т.е. без черти. И следователно като чете от базата данни - не е необходимо да се стрипслашва?

Още веднъж много ти благодаря :)


 
---------------------------
Потребител от: 27.07.06 | Всички уроци от bourev | Всички скриптове от bourev
напиши eMail напиши лично съобщение виж профила на bourev
 1 посетител чете тази тема (0 потребители и 1 гост)  
Активни потребители: ---
   




mytech.bg © 2004 - 2009 | Контакти | За реклама