Bezpieczne komentarze


(Maryo) #1

witajcie, mam problem z komentarzami, otóż nie są zabezpieczone i można w nich osadzać kod php lub html. co należy dopisać aby wszelki tekst wpisany w komentarzach był zamieniany i wyświetlany tylko i wyłącznie w postaci zwykłego tekstu. np tutaj kiedy piszę nawiasy są zamieniane na tekst: ()

itd.

mój kod php do formularza komentarzy:

if($_REQUEST[action]=="comment" || $_REQUEST[action]=="addfavour")chk_member_login($_REQUEST['viewkey']);


   if($_POST[commentpost]!="")

   {

   if($addcomment=="")$err="Proszę wpisz coś w miejscu na komentarz.";

   if($_SESSION[UID]==$list[1])$err="Nie możesz komentować swojego pliku.";

   if($err=="")

   {

         $sql="insert into comments set VID=$list[0], UID=$_SESSION[UID], commen='$addcomment', addtime='".time()."'"; $conn->execute($sql);

         if(mysql_affected_rows()==1){$sql="update set com_num=com_num+1 WHERE VID=$list[0]";$conn->execute($sql);}

         if(mysql_affected_rows()>=1) $msg="Twój komentarz dodano!";

         else $msg="Twój komentarz już tu jest.";

   }

}

(mario@) #2

http://pl.php.net/str_replace albo to http://pl.php.net/preg_replace


(Stealz) #3

Z całym szacunkiem, mario@, ale funkcje, które podałeś nie do tego służą.

Użyj htmlspecialchars().

Jeżeli chcesz usunąć wszystkie tagi html'owo - pehapowe, użyj strip_tags().

Pozdrawiam.


(adpawl) #4
  1. zapoznaj się m.in. z funkcjami:

http://pl.php.net/manual/pl/function.addslashes.php

http://pl.php.net/manual/pl/function.ht ... lchars.php

http://pl.php.net/manual/pl/function.strip-tags.php

http://pl.php.net/manual/pl/function.stripslashes.php

...itp.

  1. Możesz modyfikować wyrażeniami regularnymi http://pl.php.net/manual/pl/function.preg-replace.php

zobacz np. http://www.webhostingtalk.com/showthread.php?t=725905

  1. Możesz korzystać z gotowych klas np. http://www.owasp.org/index.php/OWASP_PHP_Filters

  2. Nie zawadzi poczytać o xss, sql injection, ...


(Maryo) #5

dzięki wam znalazłem dobry skrypt na moje bolączki i to w dodatku made in poland :slight_smile:

ale jak i gdzie go wstawić do mojego powyższego kodu?

kod na strip-tags:

function strip_tags_content($text, $tags = '', $invert = FALSE) {

  preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags);

  $tags = array_unique($tags[1]);

  if(is_array($tags) AND count($tags)> 0) {

	if($invert == FALSE) {

	  return preg_replace('@<(?!(?:'. implode('|', $tags) .')\b)(\w+)\b.*?>.*?\1>@si', '', $text);

	}

	else {

	  return preg_replace('@<('. implode('|', $tags) .')\b.*?>.*?\1>@si', '', $text);

	}

  }

  elseif($invert == FALSE) {

	return preg_replace('@<(\w+)\b.*?>.*?\1>@si', '', $text);

  }

  return $text;

}