+  HandyCache форум
|-+  Главная категория» Дополнения, плагины» Блокировать внешние ссылки (R-ext) - расширение HC
Имя пользователя:
Пароль:
Страниц: 1 [2] 3  Все   Вниз
  Отправить эту тему    Печать  
Автор Тема: Блокировать внешние ссылки (R-ext) - расширение HC  (Прочитано 47004 раз)
0 Пользователей и 1 Гость смотрят эту тему.
flash
Пользователь
**

Репутация: +1/-0
Offline Offline

Сообщений: 74


« Ответ #20 : 06 июня 2011, 16:40:15 »

Ну с PS можно согласиться наверное, тут важно не столько порнуха сколько понимание ваше как программиста(думаю если вы пишите книги то вы себя таковым счетаете) того, что под свои нужды все равно приходится в итоге самому писать, к тому же вы про фокса тут пишете, а ведь не факт что завтра на нем сидеть будете. Лучше уж сделать универсальный модуль (допустим под handycache). Я вот, к слову, тоже софтинки небольшие пишу, в связи с этим решил изучить вопрос и делать аддоны самостоятельно. Чему же нас тогда учили?
Сообщить модератору   Записан
Dan Claimant
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 16


« Ответ #21 : 09 июля 2012, 13:40:36 »

Подскажите, пожалуйста, есть ли возможность настроить R-ext чтобы он блокировал внешние ссылки только на определённых доменах?
Например, вписываешь mail.ru и все картинки с внешних сайтов блокируются.

Интересует вариант блокировки только на определённых сайтах, чтобы на всех остальных открывалось без проблем.

Спасибо заранее за ответ.
« Последнее редактирование: 09 июля 2012, 13:45:45 от Dan Claimant » Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #22 : 09 июля 2012, 20:31:22 »

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

Надо в настройках расширения в поле "Исключения для рефереров (сайтов)..." добавить только одну строку вида:
^http://(?![^/]*mail\.ru)

Вместо mail\.ru можно записать группу сайтов в таком формате:
^http://(?![^/]*(mail\.ru|yandex\.net|site\.com))

Но не забудьте, такая строка должна быть только одна в поле исключений.
Сообщить модератору   Записан
Dan Claimant
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 16


« Ответ #23 : 09 июля 2012, 22:15:20 »

Спасибо огромное, весьма эффективно =)
Сообщить модератору   Записан
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #24 : 20 ноября 2012, 15:51:01 »

[ + ] Опция: Учитывать при блокировании активность "Черного списка" и правила "Белого списка" HC'.

Желательно добавить и список "Переадресации".

Пока заменил @event с RequestHeaderReceived на BeforeRequestHeaderSend,
а то посылает на
httр://www.securitylab.ru.css.1c-bitrix-cdn.ru/bitrix/js/main/core/css/core.css
хотя, как и раньше, файл есть и по адресу
httр://www.securitylab.ru/bitrix/js/main/core/css/core.css
« Последнее редактирование: 20 ноября 2012, 16:35:16 от olDjeka » Сообщить модератору   Записан
Terfe
Постоялец
***

Репутация: +4/-1
Offline Offline

Сообщений: 126


« Ответ #25 : 08 января 2013, 14:41:47 »

Такая проблема. На сайтах выкладывают рисунки, которые находятся на сторонних ресурсах (как правило это спец. хостинги), R-ext их естественно не пропускает. Проблема состоит в том, что браузер на месте не-загруженного рисунка абсолютно ничего не показывает - как будто там и нет ничего. Как мне доработать расширение (или может кто-то добавить такую функцию?), чтоб R-ext при блокировке рисунка возвращал браузеру некий файл? Как это например сделано в самом НС в "Черном списке".
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #26 : 08 января 2013, 21:43:55 »

Как мне доработать расширение (или может кто-то добавить такую функцию?), чтоб R-ext при блокировке рисунка возвращал браузеру некий файл? Как это например сделано в самом НС в "Черном списке".

Дорабатывать ничего не надо. При блокировке R-ext использует функционал "Черного списка", т.е. браузеру передается файл, прописанный в настройках "Черного списка".
Сообщить модератору   Записан
Terfe
Постоялец
***

Репутация: +4/-1
Offline Offline

Сообщений: 126


« Ответ #27 : 08 января 2013, 21:54:45 »

Дорабатывать ничего не надо. При блокировке R-ext использует функционал "Черного списка", т.е. браузеру передается файл, прописанный в настройках "Черного списка".

А как указать другой файл?
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #28 : 08 января 2013, 22:15:15 »

В функции Stop() вместо переменной hc.action можно использовать hc.answer_header и hc.answer_body.
Сообщить модератору   Записан
Terfe
Постоялец
***

Репутация: +4/-1
Offline Offline

Сообщений: 126


« Ответ #29 : 09 января 2013, 14:43:29 »

Спасибо. Будем разбираться. Но если вы будете развивать расширение - добавьте пожалуйста такую фичу: что если ссылка соответствует регулярному выражению (например рисунки, видео-вставки), то браузеру возвращается определенный файл. А то ведь в черном списке обычно стоит прозрачная "заглушка", и в случае если попадается рисунок на стороннем ресурсе - пользователь думает что на странице ничего нет.

А в чем вы пишите расширения?
« Последнее редактирование: 09 января 2013, 15:08:04 от Terfe » Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #30 : 09 января 2013, 15:54:45 »

А то ведь в черном списке обычно стоит прозрачная "заглушка", и в случае если попадается рисунок на стороннем ресурсе - пользователь думает что на странице ничего нет.

Не вижу принципиальной разницы между картинкой, заблокированной "Черным списком" или расширением R-ext. И там, и там бывают ложные срабатывания. В мониторе HC можно посмотреть, что конкретно сработало. Если существует опасность пропустить что-то очень важное, то вероятно не стоит использовать "прозрачные заглушки" или нужно занести это важное в "Белый список" или в исключения расширения R-ext.

Цитировать
А в чем вы пишите расширения?

В LuaTest.exe из комплекта HC.
Сообщить модератору   Записан
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #31 : 06 февраля 2013, 00:01:08 »

Не стал создавать новую тему, надеюсь автор не против.

Представленный ниже вариант расширения позволяет вместо заблокированного ресурса показывать
заданный (в данном случае картинку R-ext-FF.png из папки HC).

Также, пользователи FF v3.6.28 могут раскомментировать строку
Код:
-- if re.find(hc.request_header, [[^Accept: text/html,]]) then return end
Это позволит снять в расширении галочку ограничения времени блокирования. По данной опции пока мало статистики, но та что имеется положительна.
Опция основана на том, что в случае запроса ссылки пользователем (клик, адресная строка), заголовок запроса в строке Accept содержит "text/html...", почти во всех других случаях значение было другое (запрос или не имел рефера, или был с того же хоста).
Вероятно другие версии FF и другие браузеры имеют подходящий функционал. Желающие могут проверить и внести нужные коррективы.
Проверялся ещё IE8. Тоже посылает разные строки, но при обновлении страницы - всем одинаковые.

Внесённые в  расширение изменения отмечены [ + ]

* eR_Block_external_links-ff.lua (20.27 Кб - загружено 124 раз.)

* R-ext-FF.png (0.21 Кб, 62x20 - просмотрено 339 раз.)
Сообщить модератору   Записан
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #32 : 06 февраля 2013, 15:21:06 »

Для работы расширения с доменами в puny-коде заменил в function GetHost(s) строку
Код:
s = re.find(s, [[^http://([^/]+\.)?([^/.]+)(\.\w+)(:\d+)?/]])
на
Код:
-- Меняем \w на [^/] для работы с доменами в puny-коде [+]
s = re.find(s, [[^http://([^/]+\.)?([^/.]+)(\.[^/]+)(:\d+)?/]])



Включение в HC опции для декодирования puny-кода меняет hc.url
Для обхода проблемы использовал Url из заголовка запроса, заменив строки
Код:
-- Выделяем из ссылок домены 2-го уровня
local ref_host = GetHost(ref)
local url_host = GetHost(UnifyURL(hc.url))
на
Код:
-- Выделяем Url из заголовка запроса [+]
local function GetUrl(s)
s = re.find(s, [[^GET *(\S+)]], 1)
  if s then s = string.lower(s) end
return s
end
-- Забираем Url из заголовка запроса [+]
local url = UnifyURL(GetUrl(hc.request_header))

-- Выделяем из ссылок домены 2-го уровня
local ref_host = GetHost(ref)
-- local url_host = GetHost(UnifyURL(hc.url)) -- "Отключаем" данную строку,
local url_host = GetHost(url) -- взамен "подключаем" эту [+]
! После замены в списках исключений для национальных доменов следует использовать:
  • для Url - язык локали (httр://кто.ты/)
  • для реферов - puny-код (httр://xn--j1ail.xn--r1as/)
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #33 : 06 февраля 2013, 15:58:37 »

olDjeka

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

Для примера, зайди на президент.рф и посмотри в мониторе HC, откуда там грузятся внутренние элементы. Они грузятся с kremlin.ru . Домены не совпадают, R-ext их все заблокирует!

Только исходя из этого, я не стал править R-ext для работы с кириллическими доменами.

Цитировать
! После замены в списках исключений для национальных доменов следует использовать:
для Url - язык локали (httр://кто.ты/)
для реферов - puny-код (httр://xn--j1ail.xn--r1as/)

Тогда уж и рефереры бы на локаль перевел, это просто сделать...
Сообщить модератору   Записан
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #34 : 06 февраля 2013, 17:51:14 »

Цитировать
зайди на президент.рф
Как раз туда и заходил когда заметил Улыбка
Поскольку сейчас "бум" нацдоменов госструктур, а им на пятки наступают рекламщики и иже с ними, то
по мне так лучше один раз загрузить в кеш (без добавления в исключения) и забыть (как и сделал с вышеупомянутым).

Цитировать
и рефереры бы на локаль перевел, это просто сделать...
Что-то не соображу куда копать Непонимаю
Добавлено: 06 Февраль 2013, 17:30:46

Хотя конечно неплохо бы иметь возможность включать/отключать данную опцию в настройках, но пока я в этом не очень разобрался и потому не лезу.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #35 : 06 февраля 2013, 18:39:30 »

по мне так лучше один раз загрузить в кеш (без добавления в исключения) и забыть (как и сделал с вышеупомянутым).

Это хорошо, когда таких сайтов 1-2 в день. А когда начнется реальный "бум" и десятки новых в день, будет напрягать. Да и уже закэшированные сайты могут часто менять структуру, на разных страницах могут быть разные элементы, что устанешь постоянно кэширвать их все в ручном режиме. А если у пользователя нет постоянного доступа к HC, то вообще труба... Подмигивающий

Цитировать
Что-то не соображу куда копать Непонимаю

Варианта 2:

1. Для пытливых: заюзать функцию hc.recode() - она знает puny-код.
2. Для лентяев Улыбка : реферер брать из hc.monitor_parent_url, url - из hc.url и сравнивать их домены на кириллице - и там, и там они уже декодированы (при включенной в HC соответствующей опции).

Добавлено: 06 Февраль 2013, 18:12:55

Еще у тебя в скрипте логическая ошибка:
Код:
hc.answer_body = hc.last_part and '' or Data
'' и Data перепутаны местами.

И вторая ошибка: заголовок ответа HC тоже менять надо. В нем может быть прописан тип не картинка, а HTML и другого размера. Браузер может тебя не понять.
Сообщить модератору   Записан
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #36 : 07 февраля 2013, 02:21:54 »

Цитата: olDjeka
для Url - язык локали
Забыл указать, что это при включённой опции декодирования puny в HC, иначе тоже в puny-коде.

Цитировать
то вообще труба
Для отключения возможности работы расширения с puny-кодом достаточно в function GetHost(s) заменить последний [^/] на \w (или поменять обратно указанную в посте строку).
DenZzz, спасибо Благодарю Над ошибками бум работать :Улыбка
Скорее всего пойду по лёгкому пути "модернизации инноваций", а кто не пользуется соответствующей опцией HC, тот думаю сможет добавить исключения и в puny-коде.

Поскольку не особо интересовался puny, то с трудом понял что перед recode надо ещё парсить строку
httр://кто.ты/
httр://xn--j1ail.xn--r1as/

При использовании hc.monitor_parent_url большaя часть работы может делаться самим HC, зачем дважды делать одно и тоже.

Цитировать
Браузер может тебя не понять
Тоже сомневаюсь в верности моего решения. Пока никаких сбоев не заметил, но все браузеры разные.
« Последнее редактирование: 07 февраля 2013, 02:35:28 от olDjeka » Сообщить модератору   Записан
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #37 : 07 февраля 2013, 14:20:36 »

Цитата: DenZzz
Еще у тебя в скрипте логическая ошибка:
Код:
hc.answer_body = hc.last_part and '' or Data
'' и Data перепутаны местами.
Михаил тоже указывал именно на такое применение, но перед вставкой в расширение посмотрел что отвечает сам HC. А он сначала отдаёт тело, а затем пустую строку, поэтому и решил использовать именно вариант используемый HC.
Сейчас проверил, работают оба варианта. Теперь совсем запутался или что-то упустил Непонимаю

Вот расширение которым снимал показания, а ниже его сообщения.
Код:
--[[ <HCExtension>
@name ### Temp ###
@event RequestHeaderReceived/T001
</HCExtension> ]]

function body()
hc.put_to_log('#body\r\n'..hc.answer_body)
end

function T001()
hc.action = 'stop'
hc.call_me_for('BeforeAnswerBodySend', 'body')
end

Если в ЧС не задано "Показывать файл"
Код:
07.02.13 13:30:39,168 # 375 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\Temp.lua
#body
<HTML><HEAD><TITLE>Blocked</TITLE></HEAD><BODY><H1>Blocked</H1>
Access to the requested URL <B>http://handycache.ru/</B> was not allowed (request script).
</BODY></HTML>

07.02.13 13:30:39,469 # 375 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\Temp.lua
#body


Если в ЧС задано показывать файл (картинку)
* Вероятно из-за этого браузер у меня понимает что R-ext отдаёт картинку
Код:
07.02.13 13:30:57,705 # 375 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\Temp.lua
#body
‰PNG


07.02.13 13:30:57,715 # 375 -=< MESSAGE FROM EXTENSION >=- D:\HandyCache\Extensions\Temp.lua
#body

Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #38 : 07 февраля 2013, 14:44:47 »

Цитировать
Сейчас проверил, работают оба варианта. Теперь совсем запутался или что-то упустил

Тебе просто повезло, что в этих примерах HC отдает тело только двумя кусками. Если бы куска было 3, то ты бы послал браузеру тело картинки 2 раза.
Сообщить модератору   Записан
olDjeka
Постоялец
***

Репутация: +6/-0
Offline Offline

Сообщений: 117


« Ответ #39 : 08 февраля 2013, 18:25:45 »

Для исключения конфликтов изменены некоторые вновь введённые имена и значения.
Исправил ошибку в hc.answer_body.
Для избавления от второй ошибки внёс следующие изменения:
Код:
hc.call_me_for('BeforeAnswerBodySend', 'body')
заменил
Код:
-- Помечаем заблокированное вставкой своей строки в заголовок запроса [+]
hc.request_header = re.replace(hc.request_header, [[\A]], 'HandyCache/R-ext\r\n')
в начало function AnswerSend() добавил
Код:
-- Проверям отметку о блокировке, и если есть, то [+]
if re.find(hc.request_header, 'HandyCache/R-ext') then
-- изменяем заголовок ответа, с указанием типа контента
hc.answer_header = re.replace(hc.answer_header, [[.*]], 'HTTP/1.1 430 lock (R-ext)\r\nConnection: Close\r\nContent-Type: image/png\r\n\r\n')
-- задаём обработчик для подмены тела ответа
hc.call_me_for('BeforeAnswerBodySend', 'BodyExt')
end
Теперь сообщение о сработке расширения выводится в колонку "Ответ", и можно закомментировать соответствующую строку для отключения вывода сообщений в колонку правила.

Внёс изменения для возможности работы с доменами в puny-коде:
Код:
-- Забираем Referer из заголовков запроса
local ref = UnifyURL(GetReferer(hc.request_header))

-- Получаем Referer из строки монитора [+]
-- Для работы с доменами в puny-коде следует закомментировать
-- предидущую строку кода и расскоментировать следующую*
-- if hc.monitor_parent_url=='' then return end local ref = UnifyURL(string.lower(hc.monitor_parent_url))
-- * После этого в списках исключений для национальных доменов следует использовать
-- язык локали, если для puny-кода включена соответствующая опция HC,
-- или puny-код, если она выключена

Вставил комментарий по поводу списка переадресации.

p.s. Когда (по ошибке) дважды использовал одно событие стали вываливаться ошибки, типа
Код:
BAHS-SCRIPT "AnswerSend" ERROR:
[string "--[[ <HCExtension>..."]:194: attempt to index field 'Options' (a nil value)
и многие расширения начали чудить. Избавился презагрузкой HC.
Нет ли более гумманого способа? (некоторые соединения разрывать нежелательно)

* eR_Block_external_links-ff.lua (21.81 Кб - загружено 115 раз.)
« Последнее редактирование: 08 февраля 2013, 18:34:08 от olDjeka » Сообщить модератору   Записан
Страниц: 1 [2] 3  Все   Вверх
  Отправить эту тему    Печать  

 
Перейти в: