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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как удалить из текста определенные символы 
:(
    Опции темы
begin
Дата 28.7.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Подскажите, как с помощью регулярных выражений удалить из текстовой переменной такие символы и их сочетания:
Код

%
<
>
символ перевода строки
/
"
'
&
;
--
'OR
'or
'select
'SELECT
'union
'UNION
'insert
'INSERT
'update
'UPDATE
'delete
'DELETE
@
http://
www.
.com
.org
.in
.ru

Извините, что так много, но просто хочу сделать хорошо защищенный сайт.
Сразу оговорюсь, функции mysql_real_escape_string и htmlspecialchars на мой взгляд недостаточно очищают данные от пользователя. А если я смогу вычищать все выщеприведенные символы, то так надеюсь защититься и от инъекций, и от XSS.

Очень надеюсь на вашу помощь  smile 

Это сообщение отредактировал(а) begin - 28.7.2007, 17:19
PM MAIL   Вверх
SelenIT
Дата 28.7.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



begin, Вы еще забыли предусмотреть защиту от mail injection (имхо, куда серьезнее, чем sql-таковая) и от команд ОС ;)


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
WolfON
Дата 28.7.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



SelenIT, и все это решается только грамотным контролем поступающих от пользователя данных smile


begin,
Код

 str_replace(array('%','<','>',"\n","\r", ...), '', $str);

PM MAIL ICQ   Вверх
SelenIT
Дата 28.7.2007, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



begin, имхо, Вы встали на тупиковый путь. Во-первых, Вы создадите массу проблем честным юзерам - подумайте, что будет, если кто-то из них захочет разместить на Вашем ресурсе какую-нибудь полезную статью про SQL;) ? Во-вторых, как бы Вы не расширяли Ваш "черный список", всего на свете Вы не учтете. Не лучше ли стремиться к тому, чтобы ввести можно было любые данные (сами по себе данные безопасны), но на сайте они всего лишь тупо отображались, а не интерпретировались?



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
begin
Дата 28.7.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SelenIT @ 28.7.2007,  22:10)
Не лучше ли стремиться к тому, чтобы ввести можно было любые данные (сами по себе данные безопасны), но на сайте они всего лишь тупо отображались, а не интерпретировались?

Так ведь мне нужно нечто большее, чем просто тупое  smile  отображение. Мне нужно эти данные заносить в базу.  Да, я понимаю, что для базы хватило бы вычистить лишь половину из перечисленных мною последовательностей... Но.. Считайте это паранойей  smile  и я хочу одним махом защититься сразу от нескольких видов взломов..
Кстати, на моем сайте, не будет статей по программированию..  smile 

WolfON, а там, где вы поставили многоточие, мне нужно вставить остальные искомые символы?
Так?
Код

str_replace(array('%','<','>',"\n","\r", "'","&",";","--","'OR","'or","'select","'SELECT"), '', $str);


Правда не понял вот что: почему вы взяли знак процента в одинарные кавычки, а символ переноса - в двойные? Как делать правильно? И в какие кавычки мне брать знак апострофа?
PM MAIL   Вверх
WolfON
Дата 28.7.2007, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



begin, от sql-injection помагает экранирование кавычек и спец-символов, так как SQL-код, находящийся внутри строки (в кавычках) не будет выполнен интерпретатором.

В двойные кавычки я взял \n и \r по тому, что в одинарных кавычках они будут строкой '\n' и строкой '\r', а в двойных будут представлены интерпретатором как знак переноса строки и знак возвращения каретки.
Подробнее:
http://php.su/learnphp/datatypes/?string#single
PM MAIL ICQ   Вверх
SelenIT
Дата 28.7.2007, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Цитата(begin @  28.7.2007,  23:13 Найти цитируемый пост)
Мне нужно эти данные заносить в базу. 

Ну и заносите - как есть, в виде обычной строки... Чем, кстати, не устроила mysql_real_escape_string?

Цитата(begin @  28.7.2007,  23:13 Найти цитируемый пост)
и я хочу одним махом защититься сразу от нескольких видов взломов..

Одним махом, имхо, не пойдет. SQL-иньекции и XSS происходят в разных местах и в разные моменты: первые - на сервере при подстановке полученных данных в запрос к базе, вторые - в браузере, при отображении данных из базы и не только. Соответственно, защищаться нужно разными методами и в разное время.

Цитата(begin @  28.7.2007,  23:13 Найти цитируемый пост)
Кстати, на моем сайте, не будет статей по программированию..

Вы же не для одного сайта движок пишете, а как бы универсальный... кто знает, где его предстоит использовать в следующий раз? Кстати, английские слова WHERE, OR и многие другие могут встречаться не только в компьютерных текстах... smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
begin
Дата 29.7.2007, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да, возможно и не стоит вычищать все переменные в одном месте. Нужно еще все обдумать.

И я все же не до конца понял насчет того регулярного выражения: в какие кавычки мне брать знак апострофа, если я, все же, хочу удалить его таким способом?

А насчет слов where, or и т.д., я хочу удалять только те из этих слов, перед которыми стоит апостроф. Ведь без него, насколько я понял, инъекцию невозможно будет совершить...
Или возможно?
Если возможно, то нужно удалять их все таки, а если невозможно - то удалять только апостроф.
Что скажете?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




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


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

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