Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Опубликовано:

Целый день листаю google, ответов много, но ни один, почему-то, у меня не работает. В общем, вопрос такой: надо, чтобы внешние ссылки, опубликованные на форуме, при наведении на них мыши выводились как http://mysite.ru/go/?http://....

 

Перепробовал несколько вариантов: через .htaccess у меня не вышло, через go.php и /go/index.php тоже не вышло. Ссылки остались в первоначальном виде. Помогите решить проблему!

Рекомендованные сообщения

Опубликовано:

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

Опубликовано:

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

Опубликовано:

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

Найти

 

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

Заменить на

 

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

Опубликовано:

Сработало, благодарю!

  • 4 месяца спустя...
Опубликовано:

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

 

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

  • 2 недели спустя...
Опубликовано:

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

  • 4 месяца спустя...
Опубликовано:

У меня стоит тоже 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�

 

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

Опубликовано:

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

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

 

Происходит это потому, что символы + (как и =) который входит в диапазон символов 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 )

Опубликовано:

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

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

 

А в 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)) )

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

Опубликовано:

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

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

 

 

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

Да.

Опубликовано:

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

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

 

 

Да.

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

  • 1 месяц спустя...
Опубликовано:

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

Изменено пользователем Strategius

Опубликовано:

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

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

Опубликовано:
или на один из анонимайзеров чтобы переход был анонимным

Вот этого бы крайне не хотелось, желательно бы, чтобы анонимный редирект осуществлялся средствами форума, если такое возможно.

 

Если вы не поняли, извините, проще не знаю как объяснить.

Я просто не понял другой момент - в чем заключается смысл такого редиректа, если адмимистратор адресуемого ресурса сможет увидеть сайт, с которого мы попали на его ресурс, а этого тоже не хотелось бы.

 

Замените на js редирект чтобы переход отображался со страницы go.php

А не подскажете, как совместить его с Вашей модификацией из поста #39? Возможно ли просто скрыть исходный домен из ссылки, чтобы она представляла собой вид site.ru/go/[наша ссылка]?

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.