Potap
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору При заходе в этот топик вы заметили всплывающее окно? Подскажите как можно сделать, чтобы нельзя было такое делать? Представьте если в каждом топике будет по такому окну да и еще не по одному. Это же так раздражать будет. [CLASSIFIED] Решение на 14.02.2005 г. Для закрытия уязвимости сделайте следующее: в файле ikon.lib sub ikoncode делаем изменения. Подпрограмма, после изменения, должна выглядеть так: Код: sub ikoncode { my $post = shift; ###not java### by DimoN $post =~ s/(\[img\])(.*?)(script:)(.*?)(\[\/img\])/$2$3$4\[<font color=red>Недопустимое действие! :moderator:<\/font>\]/isg; ###not java end### ###not view-source &mailto### $post =~ s/(\[img\])(.*?)(view-source:)(.*?)(\[\/img\])/$2$3$4\[<font color=red>Недопустимое действие! :moderator:<\/font>\]/isg; $post =~ s/(\[img\])(.*?)(mailto:)(.*?)(\[\/img\])/\[<font color=red>Недопустимое действие! :moderator:<\/font>]/isg; ###not view-source end### $post =~ s/\<p>//isg; $post =~ s|\[\[|\{\{|g; $post =~ s|\]\]|\}\}|g; $post =~ s|\n\[|\[|g; $post =~ s|\]\n|\]|g; $post =~ s|<br>| <br>|g; $post =~ s|\[hr\]\n|\<hr width=40\% align=left>|g; $post =~ s|\[hr\]|\<hr width=40\% align=left>|g; ##таблица $post =~ s/\[table\]\[tr\]/\[table\]/isg; while ($post =~ s{\[table\]([\S\s].+?[\S\s])\[/table\]} {my $Tmp = $1; $Tmp =~ s/\<br>/ /g; $Tmp =~ s/\[tr\]/ <\/td><\/tr><tr class=lgf><td>/g; $Tmp =~ s/\[tab\]/ <\/td><td>/g; $Tmp = qq|<table cellpadding=\"3\" cellspacing=\"0\" bgcolor=\"#FFFFFF\" width=\"75%\" border=\"1\" bordercolor=\"#EEEEEE\"><tr class=lgf><td>$Tmp<\/td><\/tr><\/table>|; }exisog) {} ## end таблица $post =~ s/\[q\]\s*(.*?)\s*\[\/q\]/<blockquote class=n2><span class=s>Цитата:<\/span><hr noshade size=1>$1<hr noshade size=1><\/blockquote>/isg; $post =~ s/\[quote\]\s*(.*?)\s*\[\/quote\]/<blockquote class=n2><span class=s>Цитата:<\/span><hr noshade size=1>$1<hr noshade size=1><\/blockquote>/isg; $post =~ s/\[url\](\S+?)\[\/url\]/<a href=\"$1\"\ target=\"_blank\">$1<\/a>/isg; $post =~ s/\[url=http:\/\/(\S+?)\]/<a href=\"http:\/\/$1\"\ target=\"_blank\">/isg; $post =~ s/\[url=(\S+?)\]/<a href=\"http:\/\/$1\"\ target=\"_blank\">/isg; $post =~ s/\[\/url\]/<\/a>/isg; $post =~ s/(^|\s|\<br\>)(http:\/\/\S+)/$1<a href="$2" target=_blank>$2<\/a> /isg; $post =~ s/(^|\s|\<br\>)(https:\/\/\S+)/$1<a href="$2" target=_blank>$2<\/a> /isg; $post =~ s/(^|\s|\<br\>)(ftp:\/\/\S+)/$1<a href="$2" target=_blank>$2<\/a> /isg; $post =~ s/(^|\s|\<br\>)(www\.\S+)/$1<a href="http:\/\/$2" target=_blank>$2<\/a> /isg; # Добавляем новые коды [c] и [s] $post =~ s/\[c\](.*?)\[\/c\]/<center>$1<\/center>/isg; $post =~ s/\[s\](.*?)\[\/s\]/<span class=s>$1<\/span>/isg; $post =~ s/\[b\]/<b>/isg; $post =~ s/\[\/b\]/<\/b>/isg; $post =~ s/\[i\]/<i>/isg; $post =~ s/\[\/i\]/<\/i>/isg; $post =~ s/\[u\]/<u>/isg; $post =~ s/\[br\]/<br>/isg; $post =~ s/\[\/u\]/<\/u>/isg; $post =~ s/\[img\](.+?)\[\/img\]/<img src=\"$1\">/isg; #Опять фиксим яву by batva $post =~ s/(\[size=)(\d+)\](.+?)(\[\/size\])/<font size=\"$2\">$3<\/font>/isg; $post =~ s/(\[font=)([A-Z a-z-]+)\](.+?)(\[\/font\])/<font face=\"$2\">$3<\/font>/isg; $post =~ s/(\[color=)([A-Za-z]+|[#\dA-F]+)\](.+?)(\[\/color])/<font color=\"$2\">$3<\/font>/isg; #end фиксим яву $post =~ s/\[\/color\]/<\/font>/isg; $post =~ s/\\http:\/\/(\S+)/<a href=\"http:\/\/$1\"\ target=\"_blank\">http:\/\/$1<\/a>/isg; $post =~ s/(\[list\])(.+?)(\[\/list\])/<UL>$2<\/UL>/isg; $post =~ s/(\[list=)(A|1)(\])(.+?)(\[\/list\])/<OL TYPE=$2>$4<\/OL>/isg; $post =~ s/(\[\*\])/<LI>/isg; $post =~ s/\[code\](.+?)\[\/code\]/<blockquote><font size=\"1\" face=\"Courier New\">Код:<\/font><hr><font face=\"Courier New\" size=\"2\"><pre>$1<\/pre><\/font><hr><\/blockquote>/isg; $post =~ s/\[code\](.+?)\[\/code\]/<blockquote><font size=\"1\" face=\"Courier New\">Код:<\/font><hr><font face=\"Courier New\"><pre>$1<\/pre><\/font><hr><\/blockquote>/isg; #Выключаем автоподсветку мыла DimoN #$post =~ s/(\S+?)\@(\S+)/<a href=\"mailto:$1\@$2\"\>$1\@$2<\/a>/ig; $post =~ s/\[email=(\S+?)\]/<a href=\"mailto:$1\">/isg; $post =~ s/\[\/email\]/<\/a>/isg; $post =~ s/(\[FLASH SIZE=1\])(.+?)(\[\/FLASH\])/<OBJECT WIDTH=80 HEIGHT=60><PARAM NAME=movie VALUE="$2"><PARAM NAME=quality VALUE=high><PARAM NAME=scale VALUE=exactfit><PARAM NAME=menu VALUE=false><PARAM NAME=bgcolor VALUE=$BGColor><EMBED src="$2" quality=high menu=false scale=exactfit WIDTH=80 HEIGHT=60 swLiveConnect=true TYPE="application\/x-shockwave-flash"><\/EMBED><\/OBJECT>/isg; $post =~ s/(\[FLASH SIZE=2\])(.+?)(\[\/FLASH\])/<OBJECT WIDTH=160 HEIGHT=120><PARAM NAME=movie VALUE="$2"><PARAM NAME=quality VALUE=high><PARAM NAME=scale VALUE=exactfit><PARAM NAME=menu VALUE=false><PARAM NAME=bgcolor VALUE=$BGColor><EMBED src="$2" quality=high menu=false scale=exactfit WIDTH=160 HEIGHT=120 swLiveConnect=true TYPE="application\/x-shockwave-flash"><\/EMBED><\/OBJECT>/isg; $post =~ s/(\[FLASH SIZE=3\])(.+?)(\[\/FLASH\])/<OBJECT WIDTH=320 HEIGHT=240><PARAM NAME=movie VALUE="$2"><PARAM NAME=quality VALUE=high><PARAM NAME=scale VALUE=exactfit><PARAM NAME=menu VALUE=false><PARAM NAME=bgcolor VALUE=$BGColor><EMBED src="$2" quality=high menu=false scale=exactfit WIDTH=320 HEIGHT=240 swLiveConnect=true TYPE="application\/x-shockwave-flash"><\/EMBED><\/OBJECT>/isg; $post =~ s/(\[FLASH=)(\S+?)(\,)(.+?)(\])(.+?)(\[\/FLASH\])/ <embed src="$6" menu=false scale=exactfit HEIGHT="$4" WIDTH="$2" quality="high"><\/embed> /isg; $post =~ s/(\[center\])(.+?)(\[\/center\])/<center>$2<\/center>/isg; $post =~ s/(\[sound\])(\S+?)(\.mid|\.midi|\.wav)(\[\/sound\])/<EMBED SRC="$2$3" AUTOSTART=FALSE LOOP=FALSE WIDTH=100><\/EMBED> /isg; $post =~ s|\{\{|\[|g; $post =~ s|\}\}|\]|g; return $post; } # end routine | Фиксятся две XSS-дырки (.http://www.securitylab.ru/46410.html): Вариант 1: В misc.cgi после Код: elsif ($action eq "icq") { | ставим: Код: после Код: elsif ($action eq "aim") { | ставим: Код: $aimname=&cleaninput($aimname); | Вариант 2: находим в misc.cgi эту строчку: Код: elsif ($action eq "icq") { | добавляем после неё Код: if($UIN!~m!^\d+$!){ print header (); &error('&Неправильный UIN ICQ'); } else{ | + ставим закрыівающую фигурную скобку чуть ниже тут: Код: Далее по AIM то же самое: находим Код: elsif ($action eq "aim") { | добавляем после него Код: if($aimname!~m!^[\-A-Z a-z\d_]+$!){ print header (); &error('&Неправильное имя AIM'); } else{ | и ниже закрываем скобку тут: Код: Первый вариант проводит стандартную замену "опасных" символов, второй — проверяет валидность номера ICQ и имени пользователя AIM'а. + сейчас при регистрации в поля ICQ и AOL можно вписать что угодно. Если нужна проверка их валидности, можно сделать следующее: в register.cgi: находим: Код: if($emailaddress !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/) { print header('text/html; charset=windows-1251'); &error("$ibtxt{'1858'}&$ibtxt{'0906'}"); } | ниже добавляем: Код: if($aolname and $aolname!~m!^[\-A-Z a-z\d_]+$!){ print header('text/html; charset=windows-1251'); &error("&Неверное имя пользователя AIM!"); } if($icqnumber and $icqnumber!~m!^\d+$!){ print header('text/html; charset=windows-1251'); &error("&Неверный ICQ UIN!"); } | profile.cgi после строки: Код: $inuseravatar = $query -> param('useravatar'); | Добавляем: Код: if($newaolname && $newaolname!~m!^[\-A-Z a-z\d_]+$!){ print header('text/html; charset=windows-1251'); &error("&Неверное имя пользователя AIM!"); } if($newicqnumber && $newicqnumber!~m!^\d+$!){ print header('text/html; charset=windows-1251'); &error("&Неверный ICQ UIN!"); } | | Всего записей: 285 | Зарегистр. 06-07-2001 | Отправлено: 12:03 03-11-2001 | Исправлено: trew, 21:27 14-02-2005 |
|