Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> убить опасные символы 
:(
    Опции темы
fakeman
Дата 9.11.2009, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Хотел узнать будет ли такое работать ?
 
Код

function ecr($string)
{
    for($i=0;$i<strlen($string);$i++)
    {
        $res='';
        switch ($string[$i])
        {
            case '\/' : $res=$res.'&#47';
            case '\\' : $res=$res.'&#47';
            case '\'' : $res=$res.'&#39';
            case '/"' : $res=$res.'&#34';
            case '/<' : $res=$res.'&#60';
            case '/>' : $res=$res.'&#62';
            case '/&' : $res=$res.'&#38';
            case '/?' : $res=$res.'&#63';
            default:
             $res=$res.$string[$i];
        }
        return $res;
    }
}


Менять опасные символы на неопасные smile smile
PM MAIL   Вверх
Pitlord
Дата 9.11.2009, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: 4
Всего: 7



fakeman, опасные символы? Звучит, как бред.
PM MAIL   Вверх
bars80080
Дата 9.11.2009, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



что вы хотите защитить от "опасных" символов?
PM MAIL WWW   Вверх
NLspieler
Дата 9.11.2009, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Для "убийства" "опасных" символов и защиты от них существует целый ряд стандартных функций,
поэтому ничего нового придумывать не нужно.


PM MAIL   Вверх
fakeman
Дата 9.11.2009, 04:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



bars80080,  Все поля где пользователь может что то вводить.. 

NLspieler,  stripslashes(strip_tags($_POST['regemail'])); при таком всякие / \ проходят... 
PM MAIL   Вверх
Simpliest
Дата 9.11.2009, 04:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: 1
Всего: 3





--------------------
user posted image
PM   Вверх
nerezus
Дата 9.11.2009, 04:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



fakeman, ну вы там что, книжек фленова поначитались, что какие-то символы убить хотите?

Ничего убивать не надо, надо просто правильно работать с данными.
Экранировать, к примеру.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Simpliest
Дата 9.11.2009, 04:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: 1
Всего: 3





--------------------
user posted image
PM   Вверх
NLspieler
Дата 9.11.2009, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



А, я понял, в чем проблема.
Из форм некоторые символы, такие, как например " или ' приходяд
в экранированном состоянии.

И для борьбы с этим есть стандартная функция stripslashes

Код

//Причем, эту функцию нужно всегда применять в ПЕРВУЮ ОЧЕРЕДЬ. Следовательно твой вариант:
$_POST['regemail'] = stripslashes(strip_tags($_POST['regemail'])); //не работает.

$_POST['regemail'] = strip_tags(stripslashes($_POST['regemail'])); 
//а так должен работать. Причем это нужно делать в самом начале скрипта.

Есть еще другой способ, полного отключения экранирования, но он довольно сложен,
поэтому можно воспользоватся "костыльной" функцией stripslashes.



Это сообщение отредактировал(а) NLspieler - 9.11.2009, 08:41
PM MAIL   Вверх
MoLeX
Дата 9.11.2009, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(.htaccess)

php_flag magic_quotes_gpc Off



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
brother79
Дата 9.11.2009, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 2
Всего: 6



Есть стандартные методы, о которых писалось выше, но если уж решили руками делать - то зачем этот switch? Есть же str_replace и preg_replace, передаёшь параметрами массивы и они заменяют попарно эл-ты.


--------------------
PM MAIL WWW   Вверх
Ипатьев
Дата 9.11.2009, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Simpliest, никогда это не употребляйте сами, и не давайте другим.
htmlspecialchars называется функция, которая употребляется в случае, если не применялась strip_tags()

fakeman, я так понимаю, что внятно сформулировать опасность этих символов вы не можете? чем вам, к примеру, не угодили символы '/?'
Что такого ужасного могут натворить эти два символа?

PM MAIL   Вверх
brother79
Дата 9.11.2009, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 2
Всего: 6



Цитата(fakeman @  9.11.2009,  00:59 Найти цитируемый пост)
Хотел узнать будет ли такое работать ?


Сразу что-то не посмотрел внимательно, 

нет не будет работать, надо  
        $res='';
вынести за цикл, а не в цикле обнулять рез-тат.


--------------------
PM MAIL WWW   Вверх
MoLeX
Дата 9.11.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



brother79, да и return тоже вынести надо
Код

function ecr($string)
{
   $res='';

    for($i=0;$i<strlen($string);$i++)
    {
        switch ($string[$i])
        {
            case '\/' : $res=$res.'&#47';
            case '\\' : $res=$res.'&#47';
            case '\'' : $res=$res.'&#39';
            case '/"' : $res=$res.'&#34';
            case '/<' : $res=$res.'&#60';
            case '/>' : $res=$res.'&#62';
            case '/&' : $res=$res.'&#38';
            case '/?' : $res=$res.'&#63';
            default:
             $res=$res.$string[$i];
        }
    }

    return $res;
}



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
sTa1kEr
Дата 9.11.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



MoLeX, так это тоже не будет работать.
PM MAIL   Вверх
brother79
Дата 9.11.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 2
Всего: 6



Цитата(sTa1kEr @  9.11.2009,  12:11 Найти цитируемый пост)
MoLeX, так это тоже не будет работать. 


Наверно, мне например не понятно это: 


Цитата(MoLeX @  9.11.2009,  12:04 Найти цитируемый пост)
            case '/"' : $res=$res.'&#34';
            case '/<' : $res=$res.'&#60';
            case '/>' : $res=$res.'&#62';
            case '/&' : $res=$res.'&#38';
            case '/?' : $res=$res.'&#63';


может я конечно что-то в php не знаю, но я почему-то думал, что константа типа '/<' - это не 1 символ, а строка из 2-х символов.


--------------------
PM MAIL WWW   Вверх
MoLeX
Дата 9.11.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



http://forum.vingrad.ru/index.php?showtopi...t&p=2016869

я просто перенес переменную и return из цикла

Добавлено через 1 минуту и 5 секунд
проблема скорей всего у ТС в том что включены магические кавычки 


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
bars80080
Дата 9.11.2009, 14:42 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



что-то странное затишье, чувствуется какой-то подвох. может я опять что-то упустил?

fakeman, я спрашивал базу данных вы хотите защитить или свой html-код на странице при выводе пользовательских данных?

для первого нужна одна функция mysql_real_escape_string()
для второго htmlspecialchars()

всё, больше ничего не надо
PM MAIL WWW   Вверх
fakeman
Дата 9.11.2009, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



bars80080,  И базу и html...
brother79,  тогда  скажите как написать символ \ в ковычках  smile 
PM MAIL   Вверх
Ипатьев
Дата 9.11.2009, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



fakeman, у вас он написан. в вашем же коде. в кавычках

Другое дело, что смысла его там писать нет никакого

Это сообщение отредактировал(а) Ипатьев - 9.11.2009, 15:47
PM MAIL   Вверх
bars80080
Дата 9.11.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



fakeman, 
Цитата(bars80080 @  9.11.2009,  13:42 Найти цитируемый пост)
для первого нужна одна функция mysql_real_escape_string()
для второго htmlspecialchars()

, все остальные ваши агрегаты ни на йоту, ни на миллиметр, ни на кончик мизинца не прибавят к защите ничего, кроме времени на выполнение скрипта
PM MAIL WWW   Вверх
sTa1kEr
Дата 9.11.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(bars80080 @  9.11.2009,  15:42 Найти цитируемый пост)
что-то странное затишье, чувствуется какой-то подвох. может я опять что-то упустил?

Нет, вы как раз все правильно поняли.
Цитата(bars80080 @  9.11.2009,  15:42 Найти цитируемый пост)
для первого нужна одна функция mysql_real_escape_string()
для второго htmlspecialchars()


PM MAIL   Вверх
fakeman
Дата 9.11.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Ипатьев, крч как я понял смысла писать эту функцию нету.

Это сообщение отредактировал(а) fakeman - 9.11.2009, 16:06
PM MAIL   Вверх
brother79
Дата 10.11.2009, 06:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 2
Всего: 6



Цитата(fakeman @  9.11.2009,  15:01 Найти цитируемый пост)
brother79,  тогда  скажите как написать символ \ в ковычках  smile  


Ну на сколько я помню, в одинарных - экранирование не действует,
то, что вы экранировали через / - мне вообще не понятно, экранируют через \ обычно
ну и реч идёт в вашем коде о замене символа, соответственно в case должны быть символы а не строки длинной 2 символа

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


--------------------
PM MAIL WWW   Вверх
Ипатьев
Дата 10.11.2009, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Как это в одинарных экранирование не действует? Еще как действует.
Иначе он имел бы в своем коде парсе еррор
PM MAIL   Вверх
brother79
Дата 10.11.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 2
Всего: 6



Цитата(Ипатьев @  10.11.2009,  09:23 Найти цитируемый пост)
Как это в одинарных экранирование не действует? Еще как действует.
Иначе он имел бы в своем коде парсе еррор 



Вы о чём? А каком экранировании идёт речь? Можно поподробней, или я что-то в пхп не понимаю.

Добавлено через 4 минуты и 31 секунду
Попробовал 

Код

echo '\/\\\'/"/</>/&/?';


Всё подтвердилось, экранировать можно только саму ковычку и слеш


--------------------
PM MAIL WWW   Вверх
sTa1kEr
Дата 10.11.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



deleted. не прочитал последнее сообщение smile 

Это сообщение отредактировал(а) sTa1kEr - 10.11.2009, 11:28
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.4700 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.