PDA

Просмотр полной версии : понимание тэгов в пхп


zoron
01.02.2008, 15:45
вопщем вопросец такой например забиваю я новость в бд указываю там например сылка на картинку как сделать так чтобы при выводе этого сообщения появилась картинка?

Isis
01.02.2008, 15:52
Перед выводом проводить ответ бд через регулярки...
Что-то типа:
$img = preg_replace("#^(img|src)?[a-z0-9\.-]+\.[jpg|jpeg|gif]{1,3}$#", "<img src=\"\\1\" border='0'/>"

Только вот неуверен что моя регулярка верная =)

Piflit
01.02.2008, 16:04
preg_match("#\[img\](.*)\[/img\]#", $stroka_iz_db, $arr);
echo "<img src=\"$arr[1]\">";

Macro
01.02.2008, 16:06
$text=preg_replace('|\[img\](.*)\[/img\]|is','<img src="\1">',$db);

PS этот код небезопасен

NOmeR1
01.02.2008, 16:16
<?php
$text = '..........http://forum.antichat.ru/antichat/pic/logo.gif..............';
$text = preg_replace('~\[img\](http(s)?://[^\x27\x22\x3E\x3C]+)\[/img\]~isU', '<img src="\\1" />', htmlspecialchars($text));
echo $text;
?>
Думаю это будет безопасно.

Isis
01.02.2008, 16:32
Nomer1 , гыгы)

<?php
$text = '..........http://"\><a href="#" onmouseover="alert(\'xss\')"><b>x4x0r</b></a>..............';
$text = preg_replace('~\[img\](http(s)?://[^\x27\x22\x3E\x3C]+)\[/img\]~isU', '<img src="\\1" />', $text);
echo $text;
?>

nc.STRIEM
01.02.2008, 17:32
по идеи так надежно

<?
$text='http://abcde"fghig.fih/sd';
$text = preg_replace('/\[img\]http:\/\/(.*)\[\/img\]/e', "'<img src=\"http://'.str_replace('\"', '%22', '$1').'\">';", $text);
echo $text;
?>

Isis
01.02.2008, 17:39
nc.STRIEM,

<?
$text='"\'/><a href=\'xaxa\' onmouseover=\'alert(/xss/)\'>XSS</a>';
$text = preg_replace('/\[img\]http:\/\/(.*)\[\/img\]/e', "'<img src=\"http://'.str_replace('\"', '%22', '$1').'\">';", $text);
echo $text;
?>

Я вот думаю...мне написать код или вы еще помучаетесь)))

nc.STRIEM
01.02.2008, 17:43
в данном коде что ты привел, XSS срабатывает не из за тэга [img], а тут идет обсуждение тэгов img . Обрабатываю строку перед передачей ее регулярке (или в самой регулярке, но это есле она одна) функцией htmlspecialchars() и все будет ок

в данном примере и банальный <script>alert()</script> сработает, и без всяких OnMouseOver итд..

Isis
01.02.2008, 17:50
Я привел этот код потому как ты написал что это надежно

NOmeR1
01.02.2008, 18:10
Isis, это надёжно. И мой код надёжен. Можно и так сделать
<?php
$text = '<script>alert()</script>';
$text = preg_replace('~\[img\](http(s)?://[^\x27\x22\x3E\x3C]+)\[/img\]~isU', '<img src="\\1" />', $text);
echo $text;
?>
Он не просил защищать от XSS, я привёл метод, который просто добавляет тег IMG и он надёжен, т.к. если в нём будут учавствовать неверные символы, тег не сработает.