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

Форум Регулярные Выражения

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

 

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

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

тема: Парсер бб кодов
 
 автор: SnooPI   (09.01.2008 в 07:26)   письмо автору
 
 

Подскажите пожалуйста самый безопасный парсер бб кодов!!!

   
 
 автор: SHAman   (09.01.2008 в 10:40)   письмо автору
 
   для: SnooPI   (09.01.2008 в 07:26)
 

Безопасный - это как? Можно самому написать. Это совсем не трудно.
preg_replace("#\[(\/?)i\]#i", "<$$1i>", $text);
preg_replace("#\[(\/?)b\]#i", "<$$1strong>", $text);
preg_replace("#\[code\]#i", "<pre><code>", $text);
preg_replace("#\[\/code\]#i", "</code></pre>", $text);

Тег url

   
 
 автор: afdm   (10.01.2008 в 08:33)   письмо автору
 
   для: SnooPI   (09.01.2008 в 07:26)
 


<?php
  $search 
= array("/\[url=(['\"]?)(www\.)([^\"']*)\\1](.*)\[\/url\]/siU",
                    
"/\[url=(['\"]?)([^\"']*)\\1](.*)\[\/url\]/siU",
                    
"/\[url](www\.)([^\"]*)\[\/url\]/siU",
                    
"/\[url]([^\"]*)\[\/url\]/siU",
                    
"/\[img]([^\"]*)\[\/img\]/siU",
                    
"#\[b\](.*?)\[/b\]#is",
                    
"#\[i\](.*?)\[/i\]#is",
                    
"#\[u\](.*?)\[/u\]#is",
                    
"#\[s\](.*?)\[/s\]#is",
                    
"#^(http://|www)?[a-z0-9\.-]+\.[a-z]{1,6}$#");

    
$replace = array("<a href=\"http://www.\\3\">\\4</a>",
                     
"<a href=\"\\2\">\\3</a>",
                     
"<a href=\"http://www.\\2\">\\2\\3</a>",
                     
"<a href=\"\\1\">\\1</a>",
                     
"<img src=../\\1 border=0>",
                     
"<b>\\1</b>",
                     
"<i>\\1</i>",
                     
"<u>\\1</u>",
                     
"<s>\\1</s>",
                     
"<a href=\"\\1\">\\1</a>");

$text preg_replace($search$replace$text); 
?>

   
 
 автор: Loki   (17.01.2008 в 11:18)   письмо автору
 
   для: afdm   (10.01.2008 в 08:33)
 

Ну и где тут безопасность? Просто теплица для XSS.

   
 
 автор: afdm   (17.01.2008 в 12:37)   письмо автору
 
   для: Loki   (17.01.2008 в 11:18)
 

аргументируйте

   
 
 автор: Loki   (17.01.2008 в 12:58)   письмо автору
 
   для: afdm   (17.01.2008 в 12:37)
 


[url]javascript:alert(document.cookie)[/url]

   
 
 автор: afdm   (17.01.2008 в 14:33)   письмо автору
 
   для: Loki   (17.01.2008 в 12:58)
 

и как быть???

   
 
 автор: Loki   (17.01.2008 в 15:26)   письмо автору
 
   для: afdm   (17.01.2008 в 14:33)
 

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

   
 
 автор: afdm   (17.01.2008 в 16:10)   письмо автору
 
   для: Loki   (17.01.2008 в 15:26)
 

может кто-нить покажет на примере? :))) а то я не особо силен в рег. выражениях :)))
если можно...

   
 
 автор: Loki   (17.01.2008 в 16:35)   письмо автору
 
   для: afdm   (17.01.2008 в 16:10)
 

ну например так:
<?
$text
=preg_replace('#(\[url\].*?)script:(.*?\[/url\])#si''$1 script:$2'$text);

   
 
 автор: kasmanaft   (17.01.2008 в 15:33)   письмо автору
 
   для: afdm   (17.01.2008 в 14:33)
 

Заменять не всё подряд, а только то, что начинается с "http://" (ftp, https, итдитп)

   
 
 автор: Loki   (17.01.2008 в 15:48)   письмо автору
 
   для: kasmanaft   (17.01.2008 в 15:33)
 

ссылки могут быть и относительными. в том числе и начинаться с javascript. Это случай совсем фантастический, но теоретически возможный:)

   
 
 автор: kasmanaft   (17.01.2008 в 15:58)   письмо автору
 
   для: Loki   (17.01.2008 в 15:48)
 

Думаю, Вы не много потеряете пользователей, если запретите им вводить относительные ссылки :)

>> в том числе и начинаться с javascript
Может быть еще код распарсить да проанализировать - опасный он или нет :))

   
 
 автор: Loki   (17.01.2008 в 16:02)   письмо автору
 
   для: kasmanaft   (17.01.2008 в 15:58)
 

>Думаю, Вы не много потеряете пользователей, если запретите им вводить относительные ссылки :)
Меня потеряете:)
Вас, например, не раздражает, когда зайдя на форум softtime.ru и кликнув по какой-нибудь ссылке, вы оказываетесь на www.sofftime.ru и хлоп - вместо "Привет, kasmanaft!" наверху "Привет, пользователь!"?
Меня вот чрезвычайно раздражает. Поэтому стараюсь ставить относительные ссылки где это возможно.

   
 
 автор: fiper   (18.01.2008 в 14:44)   письмо автору
 
   для: Loki   (17.01.2008 в 16:02)
 

А если вот так?Правильно?

$text=preg_replace("#\[code\](.*)\[\/code\]#i",htmlspecialchars("\\1",ENT_QUOTES),$text);


или так

$text=preg_replace("#\[code\](.*)\[\/code\]#si","htmlspecialchars('$1',ENT_QUOTES)",$text);

   
 
 автор: Loki   (18.01.2008 в 15:32)   письмо автору
 
   для: fiper   (18.01.2008 в 14:44)
 

Нет. Неправильно.
Правда, я не очень понял мы о ссылках говорим или уже нет?

   
 
 автор: fiper   (18.01.2008 в 16:07)   письмо автору
 
   для: Loki   (18.01.2008 в 15:32)
 

Почему неправильно. Объясните пожалуйста? Я имею ввиду в целях безопасности, код внутри [code] будет заменять html теги и xss не пройдёт

   
 
 автор: Loki   (18.01.2008 в 16:34)   письмо автору
 
   для: fiper   (18.01.2008 в 16:07)
 

Неправильно по двум причинам... ну скажем по полутора:)

[ code]
   первый блок
[ /code]
[ code]
   второй блок
   [ url]xss[ /url]
   <a href=xss>воть</a>
[ /code]

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

ну и вторая причина, что xss во втором блоке все равно сработает (в том случае, если теги url будут парсится после code). Ну и заменить только кавычки - недостаточно.

   
Rambler's Top100
вверх

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