Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Найти

 

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

Заменить на

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

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

 

А в 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 уязвимости этого мода?

Да.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

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

 

 

Да.

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

Поделиться сообщением


Ссылка на сообщение
01/10/17 19:01 (изменено)

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

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

×
×
  • Создать...