|
|
|
| Здравствуйте!
Пишу свой форум на PHP, пользуюсь вашей книжкой "PHP 5. Практика создания WEB-сайтов."
Вы рассказываете, как обработать тэги [*b][*/b], [*i][/*i], [*code][/*code].
С этими всё более-менее ясно, но хотелось бы знать, как обработать тэг [img][/img]?
Мне кажется, что лучше всего это сделать с помощью preg_replace().
Вот пример того, что люди будут вставлять на форум:
[img]http://site.ru/image1.jpg[/img]
[img]http://site.ru/image2.gif[/img]
[img]http://site.ru/image3.png[/img]
[img]http://www.site.ru/image1.jpg[/img]
[img]http://www.site.ru/image2.gif[/img]
[img]http://www.site.ru/image3.png[/img]
[img]www.site.ru/image1.jpg[/img]
[img]www.site.ru/image2.gif[/img]
[img]www.site.ru/image3.png[/img]
|
Формат изображений - gif, jpg, png.
То есть, нужно регулярное выражение, заменяющее в строке $text все подстроки вида "[img]$subtext[/img]" на "<img src='$subtext'>", при этом $subtext должен соответствовать вышеприведённому формату (по примеру того, что люди будут вставлять на форум) - это необходимо для защиты от XSS.
Прошу помочь. Заранее спасибо. | |
|
|
|
|
|
|
|
для: Figaroo
(28.03.2007 в 10:59)
| |
<?
$text=preg_replace('/\[img\](.*?)\[\/img\]/is', '<img src="$1">', $text);
|
Правда, я не понял почему именно эта конструкция защитит от xss. | |
|
|
|
|
|
|
|
для: Loki
(28.03.2007 в 12:09)
| | Строка между тэгами также должна:
- начинаться с http:// или http://www или www
- заканчиваться на .jpg или .gif или .png
- после своего начала (см. выше) и до конца содержать только цифры, английские буквы, знак нижнего подчёркивания, дефис, прямой слэш (/), точку | |
|
|
|
|
|
|
|
для: Figaroo
(28.03.2007 в 14:23)
| | вроде как я понял...
вот:
$text = preg_replace('/\[img\](http:\/\/[a-zA-Z_0-9\-\.\/]*\.(jpg|gif|png))\[\/img\]/is', '<img src="$1">', $text); | |
|
|
|
|
|
|
|
для: Figaroo
(28.03.2007 в 14:23)
| | путь может быть не только http, но и https... а может и вообще быть относительным
>- после своего начала (см. выше) и до конца содержать только цифры, английские буквы, знак нижнего подчёркивания, дефис, прямой слэш (/), точку
а знаки "=", "?", "&", ","? | |
|
|
|
|
|
|
|
для: Loki
(28.03.2007 в 15:57)
| | # | |
|
|
|
|
|
|
|
для: Trianon
(28.03.2007 в 17:13)
| | специально его не стал включать... но, в общем, верно | |
|
|
|
|
|
|
|
для: Loki
(28.03.2007 в 17:19)
| | Ребят, у вас понятия о безопасности существуют какие-нибудь?
Если вы хотите, чтобы пользователи могли вставлять простые картинки в форум, то зачем им спецсимволы?
Если разрешить вопрос, амперсанду и равно - то это ничего не даст простым пользователям, а хакеры смогут использовать для XSS.
Если разрешить относительные пути - тоже XSS'ом пахнет...
А то, найдутся умники, которые вместо картинок вам скриптов нагрузят...
Всем спасибо за внимание. | |
|
|
|
|
|
|
|
для: Figaroo
(28.03.2007 в 22:33)
| | схема javascript: - заблокирована. Левый уголок - заблокирован. Выход за пределы кавычки - и тот заблокирован. Какие XSS из-за амперсенда и равно? Пример в студию!
Опять охота на ведьм... опять символы делят на добрые и злые.... | |
|
|
|
|
|
|
|
для: Trianon
(28.03.2007 в 22:41)
| | Если в ссылке на изображение присутствуют равно, амперсанда, вопрос и пр. - это 99% не изображение, а скрипт... | |
|
|
|
|
|
|
|
для: Figaroo
(28.03.2007 в 22:54)
| | скрипт изображение чтоли не может возвращать?!
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Figaroo
(28.03.2007 в 22:54)
| | вы о динамической генерации изображений когда-нибудь слышали? они в 100% случаев генерируются скриптами.
Вообще, на вашем месте, я бы просто пользователю ткнул под нос мануал, пунктов на 20, как ему вводить ссылки... зачем думать разработчику? Пусть у юзеров голова болит... | |
|
|
|