Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: stripslashes() или mysql_escape_string() или волшебные кавычки
 
 автор: kvins   (18.02.2011 в 16:53)   письмо автору
 
 

когда делал по видеоурокам то там всегда использовался stripslashes()

вот мне интересно есть ли разница между использованием этих фуннкций или без разницы что использовать??

просто если без разницы то переделывать не буду. а если тока в удобстве то в следующих проэктах буду другим пользоватся

  Ответить  
 
 автор: psychomc   (18.02.2011 в 17:01)   письмо автору
 
   для: kvins   (18.02.2011 в 16:53)
 

вообще очень странно как stripslashes может заменить mysql_escape_string. может быть не stripslashes a addslashes???

вообще, ни то ни другое ни третье. ответ - mysql_real_escape_string. и магические кавычки лучше выключить. кстати, дело не в удобстве, а в безопасности

  Ответить  
 
 автор: neadekvat   (18.02.2011 в 17:05)   письмо автору
 
   для: psychomc   (18.02.2011 в 17:01)
 

Плюс, обращаю внимание автора, что использовать надо именно mysql_real_escape_string, а не mysql_escape_string, т.к. первая является более совершенной, а вторая, если мне не изменяет память, вообще помечена на удаление.

  Ответить  
 
 автор: psychomc   (18.02.2011 в 17:07)   письмо автору
 
   для: neadekvat   (18.02.2011 в 17:05)
 

>т.к. первая является более совершенной

за счет того что учитывает кодировку :)

кстати вы правы

mysql_escape_string
"This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged."

  Ответить  
 
 автор: kvins   (18.02.2011 в 17:33)   письмо автору
 
   для: psychomc   (18.02.2011 в 17:07)
 

кидаю описание на вопрос о stripslashes()

stripslashes -- Удаляет экранирование символов, произведенное функцией addslashes()
Описание
string stripslashes ( string str )

Удаляет экранирующие бэкслэши. (\' преобразуется в ', и т.д.). Двойные бэкслэши (\\) преобразуется в одиночные(\).

stripslashes() используется, например, когда директива конфигурации magic_quotes_gpc включена (она включена по умолчанию), и экранирование символов не требуется. Например, данные не вставляются в базу данных, а просто выводятся в браузер.

выкладываю полную картину как это работает удалив тока ненужный код с кое какими проверками
тоесть тут человек отправил коментарий на сайт а ето обработчик


if (isset($_POST['author'])) {$author = $_POST['author'];}

if (isset($_POST['text'])) {$text = $_POST['text'];}

$author = stripslashes($author);
$text = stripslashes($text);
$author = htmlspecialchars ($author);
$text = htmlspecialchars ($text);

stripslashes() автор использовал в post передаче

в любом случае теперь буду использовать то что вы посоветовали)

  Ответить  
 
 автор: neadekvat   (18.02.2011 в 17:39)   письмо автору
 
   для: kvins   (18.02.2011 в 17:33)
 

> (она включена по умолчанию)
Опять таки, в зависимости от версии, она либо уже выклюена по умолчанию, либо помечена на уделение.

Кстати, у вас некоторая путаница с обработкой. Уже, правда, много раз повторились, но еще раз:
1. Отключайте нафиг все эти магические функции и т.д., благо это можно сделать из того же .htaccess. Вы должны получать именно те данные, которые вводит пользователь и сами их обрабатывать.
2. Перед занесением в бд - используйте mysql_real_escape_string
3. И только перед выводом на экран используйте htmlspecialchars.

Пункт три относится только к пользовательским данным. Естесственно, те, кто имеют высокое доверие (админы, например) могут использовать html-код.

  Ответить  
 
 автор: psychomc   (18.02.2011 в 17:45)   письмо автору
 
   для: kvins   (18.02.2011 в 17:33)
 

я знаю как работает stripslashes. но что вы потом делаете с переменными $author, $text ? заносите в базу? тогда да, mysql_real_escape_string. и кстати имхо, htmlspecialchars лучше применять не до занесения данных в базу, а после выборки из базы.
и кстати в обработчике логика неверная. в настройках register_globals=On ?

  Ответить  
 
 автор: neadekvat   (18.02.2011 в 17:49)   письмо автору
 
   для: psychomc   (18.02.2011 в 17:45)
 

> и кстати в обработчике логика неверная. в настройках register_globals=On ?
Отчего же? Ведь автор использует массив _POST. Правда, если значения отсутствуют - должны лезть ошибки.

  Ответить  
 
 автор: psychomc   (18.02.2011 в 17:55)   письмо автору
 
   для: neadekvat   (18.02.2011 в 17:49)
 

хм, специально поискал. вот первая ссылка http://citforum.ru/internet/php/register_globals/
пишут что на $_POST тоже распространяется (сам не проверял). по поводу логики и имел ввиду, что вне зависимости от существования переменных автор их обрабатывает

  Ответить  
 
 автор: neadekvat   (18.02.2011 в 19:08)   письмо автору
 
   для: psychomc   (18.02.2011 в 17:55)
 

Не совсем понимаю, о чем вы.
Автор работает с массивом _POST, т.е. обращается к его элементам.
Другой вопрос, что register_globals таки лучше поставить в off, если они еще в on.

  Ответить  
 
 автор: mihdan   (18.02.2011 в 17:29)   письмо автору
 
   для: kvins   (18.02.2011 в 16:53)
 

В новых версиях РНР магических кавычек как таковых вообще нет.

  Ответить  
 
 автор: neadekvat   (18.02.2011 в 17:34)   письмо автору
 
   для: mihdan   (18.02.2011 в 17:29)
 

В 5.3.х они помечены на удаление, но еще присутствуют.

  Ответить  
 
 автор: Красная_шляпа   (18.02.2011 в 18:33)   письмо автору
 
   для: kvins   (18.02.2011 в 16:53)
 

<?php

/**
 * 
 * Рекурсивно применить функцию к элементам массива
 *
 * @staticvar array $return
 * @param string $callback имя функции
 * @param array $array
 * @return array
 */
function array_map_recursive($callback$array) {
    
$return = array();
    if (!empty(
$array)) {
        foreach (
$array as $k => $v) {
            if (
is_array($v)) {
                
$return[$k] = array_map_recursive($callback$v);
            }
            else {
                
$return[$k] = $callback($v);
            }
        }
    }
    return 
$return;
}


// если magic_quotes_gpc = ON, избавляемся от слешей
if (function_exists("get_magic_quotes_gpc") and get_magic_quotes_gpc()) {
    
$_GET array_map_recursive("stripslashes"$_GET);
    
$_POST array_map_recursive("stripslashes"$_POST);
    
$_COOKIE array_map_recursive("stripslashes"$_COOKIE);
    
$_SESSION array_map_recursive("stripslashes"$_SESSION);
    
$_REQUEST array_map_recursive("stripslashes"$_REQUEST);
}

?>


И забыли про магические кавычки. В 6-ой версии их не будет.

  Ответить  
 
 автор: Trianon   (18.02.2011 в 18:43)   письмо автору
 
   для: Красная_шляпа   (18.02.2011 в 18:33)
 

а в ключах?

  Ответить  
 
 автор: Красная_шляпа   (18.02.2011 в 18:56)   письмо автору
 
   для: Trianon   (18.02.2011 в 18:43)
 

у меня такой необходимости не возникало

  Ответить  
 
 автор: kvins   (18.02.2011 в 19:37)   письмо автору
 
   для: Красная_шляпа   (18.02.2011 в 18:56)
 

отошел на время скока информации)

1 да глобальные включены но тока в денвере на лок хосте. а в интернете провайдеры же сами отключают

2 а что значит логика не верна(( по каким критерием это можно понять?

3 а почему надо не когда вносишь в базу html_special_charce а до вывода?

4 спасибо красная шапка)) это надо в файл отдельно и потом просто include на каждую страницу?

5 neadekvat да в базу заносится . просто я обрезал код думаю людям в лом было бы всякое ненужное смотреть

6 извеняюсь за такой вопрос наверно дурацкий)) но можно ли прописывать так
mysql_real_escape_string($user),
mysql_real_escape_string($password));
ТОЕСТЬ В КОНЦЕ ПЕРВОГО ВМЕСТО ; стоит запятая увидел на 1 из сайтов

и если можно . скорее всего можно)) просто интересно ваше мнение))))) так же и со всеми повторяющимися вещами можно делать???

  Ответить  
 
 автор: neadekvat   (18.02.2011 в 19:54)   письмо автору
 
   для: kvins   (18.02.2011 в 19:37)
 

1. Выключите. Тем более, что на домашнем компе это делается на раз-два. А на рабочих хостах все равно проверяйте - как там дела с этим. Никогда слепо не полагайтесь на кого-либо.

2. Я думаю, этот вывод о неверной логике был сделан несколько поспешно. Все-таки, здесь только выборка, а не рабочий код. Далее - см п.5

3.
> html_special_charce
омг. htmlspecialchars.
Не надо, потому что в базе должна хранится исходная информация, та, которую ввел пользователь. Считайте это правилом.

4. Тут я бы посоветовал вам использовать несколько иной код:
if (get_magic_quotes_gpc()) {
$_GET = OwnStripSlashes($_GET);
$_POST = OwnStripSlashes($_POST);
$_COOKIE = OwnStripSlashes($_COOKIE);
$_REQUEST = OwnStripSlashes($_REQUEST);
}

function OwnStripSlashes($data)
{
if (is_array($data))
$data = array_map('OwnStripSlashes', $data);
else
$data = stripslashes($data);

return $data;
}

Но,
а) просто выключите магические кавычки - и не надо лишнего кода.
б) дело ваше, можете использовать любой код и любые настройки - я лишь советую. Не более.

5. Тут вы абсолютно правы - без надобности весь код выставлять не надо - этим вы рискуете вызвать лишь негативную реакцию.

6. А вот сейчас вы явно показали не весь код. Больше похоже, что это вырезка из чего-то подобного:
<?php
$sql 
sprintf("INSERT INTO tbl (username, password) VALUES ('%s', '%s')",
mysql_real_escape_string($username),
mysql_real_escape_string($password));

Как делать - ваше право. А мне западло высчитывать, к какому там по счету полю относится конкретная строка и потому я делаю так:
<?php
$username 
mysql_real_escape_string($username);
$password mysql_real_escape_string($password);
$sql INSERT INTO tbl (usernamepasswordVALUES ('$username ''$password')"

p.s. На самом деле я делаю чуть-чуть иначе - показал лишь суть. К тому же, если исходить из того, что password - это поле с паролем, то пароль таки надо хранить в хешированном виде - это тоже правило. Но это уже из другой оперы немножко.

  Ответить  
 
 автор: kvins   (18.02.2011 в 19:57)   письмо автору
 
   для: kvins   (18.02.2011 в 19:37)
 

еще чтоб реабилитировать автора покажу вторую часть кот не вставлял думая что он не нужен

$author = htmlspecialchars ($author);
$text = htmlspecialchars ($text);

$result = mysql_query("SELECT sum FROM comment_setting",$bd);
$myrow = mysql_fetch_array ($result);

if ($pr == $myrow["sum"])

{
$date = date ("Y-m-d");
$result2 = mysql_query("INSERT INTO comments (post,author,text,date) VALUES ('$id','$author','$text','$date')",$bd );

оказывается у меня хтмл как раз перед выбором данных был)))))))))))

  Ответить  
 
 автор: kvins   (18.02.2011 в 19:59)   письмо автору
 
   для: kvins   (18.02.2011 в 19:57)
 

спс сообщения тут на форуме какие то не удобные((( хотел ща удалить свой предыдущий пост а только создал еще 1)

  Ответить  
 
 автор: neadekvat   (18.02.2011 в 20:02)   письмо автору
 
   для: kvins   (18.02.2011 в 19:57)
 

Да как же - вот вы обрабатываете данные этой функцией (html...) а потом чуть ниже эти данные заносите в базу данных. Так как раз делать не надо.

  Ответить  
 
 автор: kvins   (18.02.2011 в 20:07)   письмо автору
 
   для: neadekvat   (18.02.2011 в 20:02)
 

аааааааа вот поэтому и писал что хотел удалить предыдущий пост)))))))))))

это он берет из базы совсем другое))) фото от спам ботов)))))))) потом типо из вывода число сравнивается с 1 из приобретенных чисел из пост

потом идет инсерт

а только потом вывод из базы полный )) кароче я всех запутал))))))))))))))))))))))))))) ахахах

извеняюсь)

просто изначальный вопрос был не в этом )) потом заговори о другом ))) итд и потом все в непонятках)))))

  Ответить  
 
 автор: neadekvat   (18.02.2011 в 20:09)   письмо автору
 
   для: kvins   (18.02.2011 в 20:07)
 

Две просьбы:
1. Поменьше скобок, пожалуйста - текст теряется;
2. Извините, блин >__<

  Ответить  
 
 автор: kvins   (18.02.2011 в 20:16)   письмо автору
 
   для: neadekvat   (18.02.2011 в 20:09)
 

дауж тупая привычка от онлайн игр , надо отвыкать

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования