ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Регулярка - фильтр
  #1  
Старый 21.07.2008, 12:32
Аватар для RaiDeRz
RaiDeRz
Участник форума
Регистрация: 05.04.2007
Сообщений: 123
Провел на форуме:
507350

Репутация: 27
Отправить сообщение для RaiDeRz с помощью ICQ
Question Регулярка - фильтр

Кто может помочь с регуляркой.....
Вообще допустим у меня есть входные параметры, там предложение какое-либо.
Мне нужно, чтобы символы a-z A-Z 0-9 а-я А-Я было там разрешены, а также символ ' заменялся на ", вообщем, а все остальное просто удалялось бы, тоесть оставались только разрешенные символы...
Кто-нить знает как это реализовать?
 
Ответить с цитированием

  #2  
Старый 21.07.2008, 12:38
Аватар для P3L3NG
P3L3NG
Banned
Регистрация: 04.06.2008
Сообщений: 402
Провел на форуме:
2267346

Репутация: 719
По умолчанию

вот какбэ моя недоделанная статья про фильтр... тебе остается тока отфильтровать то что я не отфильтровал...

PHP код:
Фильтровать я решил следующие опасные или нежелательные сообщения:

1.Тэги html 

2.всякие ' & (спецсимволы в ASCII кодировке)

3."<?" - открывающая конструкция в PHP, которая при вставке в сообщение заглючивает весь комментарий И теоретически дает возможность создать какой-либо скрипт на сервере, например шелл (shell, интерпретатор команд, который дает возможность управлять сервером)

4.JavaScript, который дает возможность осуществить XSS-атаку на бедных пользователей сайта

5.Открывающие конструкции скриптов HTML <

6.Пустые сообщения

Итак, цель поставили... Теперь будем ее решать =)

1.После поиска инфы в справочнике по PHP удалось найти функцию strip_tags. Она как раз получает значение строковой переменной (string), ищет в нем все известные html тэги и возвращает скрипту ту же переменную, но без тэгов...

Пример:

<?php

$message = $_POST['text']; 

// получаем переменную из формы

strip_tags(
$message,"тут разрешенные тэги без запятых и пробеловесли надо");

?>

2. Пункт 1 решает проблему и с этими символами

3. Создаем переменную kaka, равную <? и условие, что если текст равен только этим 2 символам, то вывести надпись "
Нехрен портить скрипт!"

<?php

$message = $_POST['text'];

$kaka = "<?";

if (
$message == $kaka

{

echo '<br><br><br><center>Не

хренп

ортить

скрипт!

<br><br>

<a href=javascript:history.back()>BACK</a></center>';

exit;

}

// end of filter

?>

4.JavaScript не будет работать, так как PHP автоматически, вставляя его в страницу, режет его слэшами \\, после чего он не работает

Для сайта JS не опасен в принципе, так как работает на пользовательском компе, и для пользователей теперь тоже...

5.За поиск символов в строке отвечает функция strstr. Если она найдет хоть один указанный символ, то возвратит значение true, которое мы и проверим условием и при успешном его выполнении напишем "
Нельзя вставлять открывающую конструкцию!"

<?php

$message = $_POST['text'];

//filter by P3L3NG from [Depth Team]

// search

$texta = strstr($message, "<"); //ищем символ <

// end of search

if (
$texta == true) {

echo '<br><br><br><center>Нел

ьзявст

авлять

открыв

ающуюк

онстру

кцию<br><br>

<a href=javascript:history.back()>BACK</a></center>';

exit;

}

?>

6.Создаем переменную blank, равную ничему и условие, что если текст равен переменной, то вывести надпись "
Все символы отфильтрованы!Сообщение удалено"

<?php

$message = $_POST['text'];

//FUCKING filter by P3L3NG from [Depth Team]

$blank = "";

if (
$message == $blank

{

echo '<br><br><br><center>Все&nbsp;

символы

былиотф

ильтров

аны!Сооб

щениеуд

алено!<br><br>

<a href=javascript:history.back()>BACK</a></center>';

exit;

}

?>
 
Ответить с цитированием

  #3  
Старый 21.07.2008, 12:39
Аватар для P3L3NG
P3L3NG
Banned
Регистрация: 04.06.2008
Сообщений: 402
Провел на форуме:
2267346

Репутация: 719
По умолчанию

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

  #4  
Старый 21.07.2008, 12:41
Аватар для RaiDeRz
RaiDeRz
Участник форума
Регистрация: 05.04.2007
Сообщений: 123
Провел на форуме:
507350

Репутация: 27
Отправить сообщение для RaiDeRz с помощью ICQ
По умолчанию

Нет... Ты не понял тут уже в 100 раз сложнее.....
Надо это делать через регулярку именно.
Чтобы все символы которые на входят удалялись... Тоесть можно, только:
Цитата:
a-z A-Z 0-9 а-я А-Я , . ? !
 
Ответить с цитированием

  #5  
Старый 21.07.2008, 12:44
Аватар для krypt3r
krypt3r
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме:
3660186

Репутация: 905


По умолчанию

Что-нить типа
Код:
$str =~ y/'/"/;
$str =~ s/[^A-Za-zА-Яа-я0-9"]//g;
В квадратных скобках укажи те символы, которые фильтроваться не должны

Последний раз редактировалось krypt3r; 21.07.2008 в 12:47..
 
Ответить с цитированием

  #6  
Старый 21.07.2008, 12:58
Аватар для RaiDeRz
RaiDeRz
Участник форума
Регистрация: 05.04.2007
Сообщений: 123
Провел на форуме:
507350

Репутация: 27
Отправить сообщение для RaiDeRz с помощью ICQ
По умолчанию

Хм.... А что делает =~ ?
И кстати как исп. то что ты дал?
 
Ответить с цитированием

  #7  
Старый 21.07.2008, 14:38
Аватар для RaiDeRz
RaiDeRz
Участник форума
Регистрация: 05.04.2007
Сообщений: 123
Провел на форуме:
507350

Репутация: 27
Отправить сообщение для RaiDeRz с помощью ICQ
По умолчанию

Вообщем впринципи у меня можно считать получилось выглядит таким образом
PHP код:
    public function filter_str($text) {
        
$search = array("/'/"// Замена ' на "
                        
                        
                        
);
        
$replace = array('"',
                        
                        
                        );
        
$text preg_replace($search$replace$text);
        
$search "/[a-zA-Zа-яА-Я0-9\!\,\.\?\ \"\\n]+/";
        
preg_match_all($search$text$text);
        
$text implode(''$text[0]);
        return 
$text;
    } 
 
Ответить с цитированием

  #8  
Старый 21.07.2008, 14:49
Аватар для krypt3r
krypt3r
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме:
3660186

Репутация: 905


По умолчанию

RaiDeRz, ну раз ты не указал в первом посте ЯП, я написал регулярку в терминах перла
 
Ответить с цитированием

  #9  
Старый 21.07.2008, 15:01
Аватар для Helios
Helios
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
Провел на форуме:
1469995

Репутация: 589
Отправить сообщение для Helios с помощью ICQ
По умолчанию

Цитата:
Сообщение от RaiDeRz  
Вообщем впринципи у меня можно считать получилось выглядит таким образом
PHP код:
    public function filter_str($text) {
        
$search = array("/'/"// Замена ' на "
                        
                        
                        
);
        
$replace = array('"',
                        
                        
                        );
        
$text preg_replace($search$replace$text);
        
$search "/[a-zA-Zа-яА-Я0-9\!\,\.\?\ \"\\n]+/";
        
preg_match_all($search$text$text);
        
$text implode(''$text[0]);
        return 
$text;
    } 
Использовать preg_replace для замены кавычек - то еще извращение. Для этого лучше всего подойдет str_replace:
PHP код:
$str str_replace("'"'"'$str); 
А для удаления лишних символов лучше поступить так:
PHP код:
$text preg_replace('/[^a-zA-Zа-яА-Я0-9\!\,\.\?\ \"\n]+/'''$text);
// все, что нам не подходит, заменяем пустым местом, то бишь удаляем 
Меньше операций - быстрее работа.
 
Ответить с цитированием

  #10  
Старый 21.07.2008, 15:16
Аватар для .:EnoT:.
.:EnoT:.
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме:
4832771

Репутация: 1916


По умолчанию

Цитата:
Сообщение от RaiDeRz  
Вообщем впринципи у меня можно считать получилось выглядит таким образом
омг, извращенец...
Намного проще так:
PHP код:
<?php
function str($str){
    
preg_match_all ('/[a-zA-Zа-яА-Я0-9 \.,\?!"]+/'str_replace ("'"'"'$str), $b);
    return 
implode(''$b[0]);
}

$a "kldjfw+!897895k ' cvwsk()*&%dfJHYGорШОГлол абвгд'";
echo 
str($a);  
?>
Плюс ко всему восклицательный знак и запятую экранировать не обязательно.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Перевод] Фильтры гугла - Google Filters Solide Snake Статьи 4 25.03.2008 16:19
Google Filter baltazar Статьи 2 23.03.2008 21:25
Фильтр одинарных кавычек Garret PHP, PERL, MySQL, JavaScript 2 28.05.2005 13:55
Фильтр пропускает все кроме угловых скобок... Вопрос. Cnhfyybr Форумы 12 07.12.2004 22:36



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ