|
|
|
| Подскажите пожалуйста самый безопасный парсер бб кодов!!! | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: afdm
(10.01.2008 в 08:33)
| | Ну и где тут безопасность? Просто теплица для XSS. | |
|
|
|
|
|
|
|
для: Loki
(17.01.2008 в 11:18)
| | аргументируйте | |
|
|
|
|
|
|
|
для: afdm
(17.01.2008 в 12:37)
| |
[url]javascript:alert(document.cookie)[/url]
|
| |
|
|
|
|
|
|
|
для: Loki
(17.01.2008 в 12:58)
| | и как быть??? | |
|
|
|
|
|
|
|
для: afdm
(17.01.2008 в 14:33)
| | проверять на наличие подобных конструкций | |
|
|
|
|
|
|
|
для: Loki
(17.01.2008 в 15:26)
| | может кто-нить покажет на примере? :))) а то я не особо силен в рег. выражениях :)))
если можно... | |
|
|
|
|
|
|
|
для: afdm
(17.01.2008 в 16:10)
| | ну например так:
<?
$text=preg_replace('#(\[url\].*?)script:(.*?\[/url\])#si', '$1 script:$2', $text);
|
| |
|
|
|
|
|
|
|
для: afdm
(17.01.2008 в 14:33)
| | Заменять не всё подряд, а только то, что начинается с "http://" (ftp, https, итдитп) | |
|
|
|
|
|
|
|
для: kasmanaft
(17.01.2008 в 15:33)
| | ссылки могут быть и относительными. в том числе и начинаться с javascript. Это случай совсем фантастический, но теоретически возможный:) | |
|
|
|
|
|
|
|
для: Loki
(17.01.2008 в 15:48)
| | Думаю, Вы не много потеряете пользователей, если запретите им вводить относительные ссылки :)
>> в том числе и начинаться с javascript
Может быть еще код распарсить да проанализировать - опасный он или нет :)) | |
|
|
|
|
|
|
|
для: kasmanaft
(17.01.2008 в 15:58)
| | >Думаю, Вы не много потеряете пользователей, если запретите им вводить относительные ссылки :)
Меня потеряете:)
Вас, например, не раздражает, когда зайдя на форум softtime.ru и кликнув по какой-нибудь ссылке, вы оказываетесь на www.sofftime.ru и хлоп - вместо "Привет, kasmanaft!" наверху "Привет, пользователь!"?
Меня вот чрезвычайно раздражает. Поэтому стараюсь ставить относительные ссылки где это возможно. | |
|
|
|
|
|
|
|
для: 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);
|
| |
|
|
|
|
|
|
|
для: fiper
(18.01.2008 в 14:44)
| | Нет. Неправильно.
Правда, я не очень понял мы о ссылках говорим или уже нет? | |
|
|
|
|
|
|
|
для: Loki
(18.01.2008 в 15:32)
| | Почему неправильно. Объясните пожалуйста? Я имею ввиду в целях безопасности, код внутри [code] будет заменять html теги и xss не пройдёт | |
|
|
|
|
|
|
|
для: fiper
(18.01.2008 в 16:07)
| | Неправильно по двум причинам... ну скажем по полутора:)
[ code]
первый блок
[ /code]
[ code]
второй блок
[ url]xss[ /url]
<a href=xss>воть</a>
[ /code]
|
в этом случае у вас будут захвачены только крайние теги. надо использовать не (*.), а (.*?)
ну и вторая причина, что xss во втором блоке все равно сработает (в том случае, если теги url будут парсится после code). Ну и заменить только кавычки - недостаточно. | |
|
|
|