Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...

Recommended Posts

А можно ли сделать, чтоб все внешние ссылки открывались в новом окне?

Share this post


Link to post
Share on other sites

Модификация из этой темы совместима с стандартной настройкой "Открывать внешние ссылки в новом окне?".

Share this post


Link to post
Share on other sites

У меня стоит настройка в админке, но это не влияет на открывание внешних ссылок. Всё равно в этом же открывается.

Share this post


Link to post
Share on other sites

Открыть /forum/public/js/ipb.js

Найти

 

ipb.delegate.register('a[rel~="external"]', ipb.global.openNewWindow );

Заменить на

 

ipb.delegate.register('a[rel~="external"]', ipb.global.openNewWindow , 'force' );

Share this post


Link to post
Share on other sites

Большое спасибо! Гораздо лучше, чем хук использовать.

 

Только у меня перестали открываться внешние ссылки в новом окне. В админке настройка включена, из поста #64 действие проделал, но все равно ссылки открываются в активном окне...

Share this post


Link to post
Share on other sites

Как сделать, чтобы поддомены не считались внешней ссылкой?

Share this post


Link to post
Share on other sites

У меня стоит тоже go.php, но это совсем другая модификация.

 

Вот содержание файла go.php:

 

 

<?php
$url = $_REQUEST['go'];
$url = base64_decode(strrev($url));
//header('Location: '.$url);
echo "
<html>
<head>
<title>Переадресация</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
<meta http-equiv=\"Page-Enter\" content=\"revealTrans(Duration=0.9,Transition=12)\">
<meta http-equiv=\"Page-Exit\" content=\"BlendTrans(Duration=2.0)\">
<meta http-equiv=\"refresh\" content=\"1;url=$url\">
<style>
body{ font-family:Arial, Helvetica, sans-serif; font-size:12px; background-color:#EBEBEB; }
</style>
</head>
<body>
<table width=\"100%\" height=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"border:solid 1px;background: #FFFFFF url(/grafik/fon1.gif);text-align:center;border-radius: 6px;-moz-border-radius: 6px;box-shadow: rgba(0, 0, 0, 0.58) 0px 1px 3px;-moz-box-shadow: rgba(0, 0, 0, 0.58) 0px 1px 3px;\">
<tr>
<td align=\"center\" valign=\"middle\">
<div style=\"padding:20px;border:solid 1px gray;background: #FFFFFF;text-align:center;width:70%;border-radius: 6px;-moz-border-radius: 6px;box-shadow: rgba(0, 0, 0, 0.58) 0px 1px 3px;-moz-box-shadow: rgba(0, 0, 0, 0.58) 0px 1px 3px;\">

<h2 style=\"color:#000\" align=\"center\">Переход по внешней ссылке - <a href=\"#\" onClick=\"window.close()\">закрыть</a></h4>
<hr width=\"100%\" color=\"#0703BF\">
<div style=\"padding:20px\" align=\"center\">Вы покидаете форум по внешней ссылке, предоставленной одним из участников.</div><br>
<center>
<div id=\"res\">Ошибочка вышла...<br />$url</div>
<script type=\"text/javascript\">
function timer() {
if(c>0) {
document.getElementById(\"res\").innerHTML = '<font face=\"Verdana\" color=\"#008000\"><b>Ссылка будет готова через:</b></font> ' + c + ' секунду';
c=c-1; setTimeout(\"timer()\", 1000);
} else {
var info = '<center><a href=\"$url\" rel=\"nofollow\">$url</a></center>';
document.getElementById(\"res\").innerHTML = info;}
}
var c=1;
if (window.location.hash == \"#7x9EdEqDvX\")
c = 0; timer();
</script>

<noscript><font face=\"Verdana\"><b style=\"color: red; background: inherit;\"><br>Включите у браузера поддержку JavaScript!<br /></b></font></noscript>
</center>
</div>
</td>
</tr>
</table>
</body></html>

</head></html>";
exit;
?>

 

 

 

А вот это заменяется в файле admin/sources/classes/bbcode/custom/defaults.php

Найти:

 

 

	$rels	= array();
	$rel	= '';
	$_title = '';

	if( $this->settings['posts_add_nofollow'] )
	{
		if ( ! stristr( $option, $_SERVER['HTTP_HOST'] ) )
		{
			$rels[]	= "nofollow";
		}
	}

	if( $this->settings['links_external'] )
	{
		if ( ! stristr( $option, $_SERVER['HTTP_HOST'] ) )
		{
			$rels[]	= "external";
			$_title = $this->lang->words['bbc_external_link'];
		}
	}

	if( count($rels) )
	{
		$rel = " rel='" . implode( ' ', $rels ) . "'";
	}

	return "<a href='{$option}' class='bbc_url' title='{$_title}'{$rel}>{$content}</a>";
}
}

 

 

 

Заменить на:

 

 

               $rels   = array();
               $rel    = '';

               if( $this->settings['posts_add_nofollow'] )
               {
                       $rels[] = "nofollow";
               }

               if( $this->settings['links_external'] )
               {
                       $rels[] = "external";
               }

               if( count($rels) )
               {
                       $rel = " rel='" . implode( ' ', $rels ) . "'";
               }

               if( !eregi('http://'.$_SERVER['SERVER_NAME'], $option) ) 
               {
                       $option = $this->settings['board_url'].'/go.php?go='.strrev(base64_encode($option));
                       $rel .= " target='_blank'";
               }

               if( $this->settings['posts_add_nofollow'] )
               {
                       return "<a href='{$option}' class='bbc_url' target='_blank'{$rel}>{$content}</a>";
               }
               else
               {
                       return "<a href='{$option}' class='bbc_url'{$rel}>{$content}</a>";
               }
       }
}

 

 

 

Всё бы и хорошо, но есть одна проблема: При переходе с ссылки размещённой на форуме, некоторые ссылки бьються, если в них содержаться русские буквы.

Пример - Вот такая есть страница:

https://ru.wikipedia.org/wiki/Крестовики

 

А вот как она отображаются после перехода:

https://ru.wikipedia.org/wiki/Крестд,�.4.�.

 

Или другие варианты:

https://ru.wikipedia.org/wiki/Прд/4b�b4.�-t/t/t,4c��`4-t,�-%0B�%18�%18m%0B�%18�

 

Как это исправить?

Share this post


Link to post
Share on other sites

но это совсем другая модификация.

Еще не взломали?

 

Происходит это потому, что символы + (как и =) который входит в диапазон символов base64 является служебным в строке запроса и означает пробел. Поэтому его нужно кодировать.

strrev(base64_encode($option))

заменить на

urlencode( strrev(base64_encode($option)) )

 

А в go.php для предотвращения этой xss уязвимости

base64_decode(strrev($url))

Заменить на

htmlspecialchars( base64_decode(strrev($url)), ENT_QUOTES, 'UTF-8', FALSE )

  • Upvote 1

Share this post


Link to post
Share on other sites

Еще не взломали?

Да я читал о "стрёмности" этого мода. Использую на свой страх и риск, так как мод довольно функционален.

 

А в go.php для предотвращения этой xss уязвимости

base64_decode(strrev($url))

Заменить на

htmlspecialchars( base64_decode(strrev($url)), ENT_QUOTES, 'UTF-8', FALSE )

Заменил, спасибо. Этот фикс решит проблему xss уязвимости этого мода?

Перекеширование после этого делать не нужно?

 

Происходит это потому, что символы + (как и =) который входит в диапазон символом base64 являются служебным в строке запроса и означает пробел. Поэтому его нужно кодировать.

strrev(base64_encode($option))

заменить на

urlencode( strrev(base64_encode($option)) )

Ух ты сработало. Большое спасибо!

Share this post


Link to post
Share on other sites

Перекеширование после этого делать не нужно?

По идее нужно. Можете заменить в go.php base64_decode(strrev($url)) на base64_decode(strrev(str_replace(' ', '+', $url))) тогда сбрасывать кеш сообщений не потребуется.

 

 

Этот фикс решит проблему xss уязвимости этого мода?

Да.

  • Upvote 1

Share this post


Link to post
Share on other sites

По идее нужно. Можете заменить в go.php base64_decode(strrev($url)) на base64_decode(strrev(str_replace(' ', '+', $url))) тогда сбрасывать кеш сообщений не потребуется.

Уже кеш сообщений сбросил :)

 

 

Да.

Ещё раз спасибо за помощь.

Share this post


Link to post
Share on other sites

Игорь, а Ваша модификация из этой темы позволяет скрыть свою ссылку от сайта, на который происходит редирект? Я просто не очень понял, если честно, как работает этот редирект в целом )

Edited by Strategius

Share this post


Link to post
Share on other sites

Скрыть от сайта на который происходит редирект, адрес страницы откуда был сделан переход, можно только через дополнительный промежуточный сайт так называемый "link anonymous" - в этом случае он будет фигурировать в качестве реферера. Без него, серверный редирект передаст реферер страницы непосредственно откуда был сделан редирект, а js редирект адрес страницы go.php (в этом случае обязательно должен быть meta или js редирект. серверный, независимо от их количество, сохранит первоначальный реферер). Если вы не поняли, извините, проще не знаю как объяснить. В сети найдете полно статей на тему анонимного перехода, доступным для новичков и менее опытных от них пользователей языком.

Если говорить конкретно о моей модификации, то она сохранит реферер страницы откуда был сделан редирект, так как используется серверный редирект в go.php. Замените его на js редирект чтобы переход отображался со страницы go.php, или на один из сайтов анонимайзеров чтобы переход был анонимным.

  • Upvote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...