Временно решение за проблемите с img tags

Последните проблеми със сигурността на phpBB форумите са по-скоро вероятни, отколкото действителни. В най-общи линии проблемът се състои в това, че phpBB позволява визуализация на генерирана от PHP скрипт картинка. Дейталът е в това, че може да се използва злонамерен код, вместо картинка. Ето и моето решение на проблема. При него [img] няма да визуализират картинка, a ще обрнат адреса на картинката в URL. Така дори да има злонамерен код, той ще се изпълни извън форума ;).
 
Отворете: bbcode.tpl
 
Намерете:
 
<!-- BEGIN img --><img src="{URL}" border="0" /><!-- END img -->
 
Заместете кода с:
 
<!-- BEGIN img --><a href="{URL}" target="_blank" class="postlink">{URL}</a><!-- END img -->
 
Сменете стария код с новия.
 
 
Има вариант, при който забранявате всички BBcode-ве, но е доста неудобно и няма защо другите функции да страдат заради една потенциална (вероятна опасност).
 
 
Третият вариант е да забраните използването на img напълно. Това може да стане по този начин:
 
Отворете: includes/bbcode.php

Намерете:
 
$text = str_replace("[i:$uid]", $bbcode_tpl['i_open'], $text);
$text = str_replace("[/i:$uid]", $bbcode_tpl['i_close'], $text);
 
Под този код на нов ред добавете:
 
//Fix - disable [img] code!
$text = str_replace("[img:$uid]", "[img]", $text);
$text = str_replace("[/img:$uid]","[/img]", $text);
 
Сменете стария код с новия. Източникът за този хак е mynuke.ru
 
Най-новото решение на проблема идва от http://www.nukefixes.com/ и то е:
 
Отворете: includes/bbcode.php
Намерете:
 
function bbencode_first_pass($text, $uid)
{
 
Под този код на нов ред добавете:
 
$img_start = 0;
   while( preg_match('/\[img\](.*)\[\/img\]/', substr($text,$img_start), $imgurl) )
   {
      $img_url = $imgurl[1];
      $img_start = strpos($text, $imgurl[0], $img_start) + strlen($imgurl[0]);
      if(!@getimagesize($img_url))
      {
         message_die(GENERAL_ERROR, "The img ($img_url) is not valid");
      }
      if($img_start >= strlen($text)) {
         break;
      }
   }
 
Това не е официална поправка, но засега поне работи при мен, което не означава, че поемам отговорността, ако нещо се случи с вашите форуми ;-). С две думи всички промени се правят на собствен риск.
 
А, и един съвет. Винаги преди да променяте нещо по файловете, напраете си резервни копия от тях и чак тогава действайте. Същото се отнася и ако променяте нещо по базата данни.




{START_COUNTER}