<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://sfsys.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9E%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD_%D0%B4%D0%B5%D0%BC%D0%BE%D0%BD%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8</id>
	<title>Онлайн демонстрации - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://sfsys.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9E%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD_%D0%B4%D0%B5%D0%BC%D0%BE%D0%BD%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8"/>
	<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=%D0%9E%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD_%D0%B4%D0%B5%D0%BC%D0%BE%D0%BD%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8&amp;action=history"/>
	<updated>2026-04-04T13:31:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>http://sfsys.ru/index.php?title=%D0%9E%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD_%D0%B4%D0%B5%D0%BC%D0%BE%D0%BD%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=3174&amp;oldid=prev</id>
		<title>Admin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=%D0%9E%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD_%D0%B4%D0%B5%D0%BC%D0%BE%D0%BD%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=3174&amp;oldid=prev"/>
		<updated>2021-02-07T06:55:27Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 06:55, 7 February 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=%D0%9E%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD_%D0%B4%D0%B5%D0%BC%D0%BE%D0%BD%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=3173&amp;oldid=prev</id>
		<title>Admin at 08:34, 13 December 2020</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=%D0%9E%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD_%D0%B4%D0%B5%D0%BC%D0%BE%D0%BD%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=3173&amp;oldid=prev"/>
		<updated>2020-12-13T08:34:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]}}&lt;br /&gt;
&lt;br /&gt;
Онлайн демонстрации, доступные в этой документации, создают запросы к консольному клиенту, который не имеет доступа к базе данных. HTTP-сервер (Apache в данном случае) служит proxy-провайдером для этих запросов. Это позволяет не открывать входящий порт консольного клиента в Интернет, он может работать с любого сервера в локальной сети proxy-провайдера, который может содержать защиту от атак доступности сервиса или черный список.&lt;br /&gt;
&lt;br /&gt;
Однако, чтобы продемонстрировать возможности создания защиты с помощью самого клиента, в его проекте создана и работает особая программа, создающая защиту от DOS или DDOS атак онлайн примеров с помощью широко используемого в интернете теста ''Captcha''. Тест ''Captcha'' вставляется в момент попытки пользователя выполнить один из онлайн примеров, если количество обращений к примеру достигнет определенного числа попыток. Если пользователь решает показанный ему тест, счетчик попыток обнуляется, иначе тест будет показан снова и снова, и, в конечном итоге IP пользователя будет заблокирован на определенное время. Ниже дан более подробный алгоритм работы:&lt;br /&gt;
* До начала цикла работы, программа клиента создает таблицу ВходящиеСоединения, которая будет содержать информацию по входящим IP адресам и их статусу.&lt;br /&gt;
* Для уменьшения общей нагрузки на систему, на которой работает консольный клиент, входящий порт открывается с помощью функции [[IPConnection.ListenEx|ListenEx]].&lt;br /&gt;
* При поступлении нового соединения (от Apache proxy сервера), клиент читает http заголовок и находит значение поля '''X-Forwarded-For'''. В этом поле Apache сервер сохраняет оригинальный IP-адрес входящего соединения.&lt;br /&gt;
* Программа находит полученный IP-адрес в таблице ВходящиеСоединения (либо добавляет его туда, если он не найден), и проверяет его статус.&lt;br /&gt;
** Если IP-адрес заблокирован, программа разрывает соединение, Apache сервер также разрывает соединение с реальным клиентом.&lt;br /&gt;
** Если IP-адрес не заблокирован, но для него инициирован тест ''Captcha'', число попыток решения теста увеличивается на единицу и, если оно превысило определенный порог, на IP-адресе устанавливается флаг блокировки и связь разрывается.&lt;br /&gt;
** Для остальных IP-адресов ведутся переменные: общее количество соединений и количество соединений за последнюю минуту. Если одно или второе значение достигает порога, для адреса инициируется тест ''Captcha'' с числом попыток равным нулю.&lt;br /&gt;
* Программа продолжает разбор заголовка полученного http-пакета. В данном случае, она проверяет, к какому ресурсу происходит обращение. Для программы Javascript в браузере, кроме стандартных запросов к онлайн демонстрациям, выделено два дополнительных запроса к ''Captcha'' функциям: &lt;br /&gt;
** ''?CaptchaReq'': браузер пользователя проверяет необходимость решения теста ''Captcha''. Если для IP-адреса не инициирован тест ''Captcha'', программа возвратит ответ ''200 OK'' и разорвет соединение (это будет говорить программе Javascript в браузере о том, что нет необходимости решать тест и можно отправить запрос по выполнению требуемой онлайн демонстрации). Если же для IP-адреса инициирован тест ''Captcha'', программа возвратит ответ ''403 Forbidden'' и отдаст тест ''Captcha'' в теле ответа (о создании теста см. ниже).&lt;br /&gt;
** ''?CaptchaSolve'': браузер пользователя передает ответ пользователя на тест ''Captcha''. Если для IP-адреса не инициирован тест ''Captcha'', это говорит о какой-то ошибке синхронизации, либо о том, что с данного IP-адреса работает более одного пользователя. В этом случае, программа возвратит ответ ''200 OK'' и разорвет соединение (это будет говорить программе Javascript в браузере о том, ''Captcha'' решена успешно (хотя она даже не проверялась) и можно отправить запрос по выполнению требуемой онлайн демонстрации). Если же для IP-адреса инициирован тест ''Captcha'', программа продолжит расшифровку запроса, и, получив из строки запроса переменную ''Answer'', проверит соответствие решения пользователя сохраненному за данным IP-адресом решению теста ''Captcha'' (описание здесь несколько упрощено для лучшего понимания). В случае, если решения...&lt;br /&gt;
*** ...совпадают, программа возвратит ответ ''200 OK'', снимет с IP-адреса признак необходимости решения теста ''Captcha'' и разорвет соединение (это будет говорить программе Javascript в браузере о том, что ''Captcha'' решена успешно и можно отправить запрос по выполнению требуемой онлайн демонстрации).&lt;br /&gt;
*** ...не совпадают, программа увеличит счетчик неверного решения теста ''Captcha'', и если этот счетчик больше порогового значения, установит на клиенте признак блокировки и разорвет связь; в ином случае, программа возвратит ответ ''403 Forbidden'' и отдаст '''новый''' тест ''Captcha'' в теле ответа (о создании теста см. ниже).&lt;br /&gt;
* Если входящий пакет не содержит ни одного из запросов ''Captcha'', программа проверит, инициирован ли этот тест для данного IP-адреса. Если тест не инициирован, будет загружен модуль соответствующей демонстрации в новом потоке, и ему будет передано текущее соединение. Если тест, инициирован, программа возвратит ответ ''403 Forbidden'' и отдаст '''новый''' тест ''Captcha'' в теле ответа (о создании теста см. ниже).&lt;br /&gt;
* В этом же рабочем цикле, программа очищает флаги ''Captcha'' и блокировки с IP-адресов в зависимости от времени, прошедшего с момента их последнего соединения (последнего чтения заголовка http пакета). Если для IP-адреса с блокировкой прошло 4 часа, этот адрес удаляется из таблицы. При попытке нового соединения с этого адреса, он будет считаться чистым и сможет пользоваться сервисами системы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Создание теста ''Captcha'' ===&lt;br /&gt;
Для создания нового теста, программа случайным образом подбирает фразу теста состоящую из ограниченного алфавита, включающего буквы, цифры и знаки с таким расчетом, чтобы при их вращение на 90° в любую сторону знак не был похож на другие знаки алфавита. После этого, программа вызывает новый поток, чтобы не задерживать генерацией картинки теста возможных новых клиентов. В новом потоке программа создает пустую картинку с фиксированным разрешением и, для каждой буквы фразы решения, подбирает случайным образом: шрифт (из фиксированного набора), его размер (из диапазона размеров), свойства шрифта (наклон, жирность, сглаживание и пр.), его цвет, наносит каждую получившуюся букву на результирующую картинку, искажая ее с помощью функции [[Picture.TransformPicture|TransformPicture]]. После вывода букв, программа добавляет случайные линии и овалы, чтобы усложнить работу программам автоматического решения таких тестов. Картинка переводится в формат ''png'', кодируется в ''base64'' и отправляется по ожидающему соединению, после чего соединение разрывается. Пример создаваемой картинки показан на рис. 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=250px heights=100px&amp;gt;&lt;br /&gt;
Captcha example.png||Рис. 1. Пример создаваемого теста ''Captcha'' для фразы '''CLNYUJ'''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Доступные онлайн демонстрации ==&lt;br /&gt;
&lt;br /&gt;
Данная документация содержит две онлайн демонстрации, использующие возможности работы с HTTP пакетами, штрихкодами и 2D символами, исполнения кода, и вывода результата в веб):&lt;br /&gt;
* Демонстрация [[Генерация штрихкодов|генерации штрихкодов и символов]] позволяет получить доступ к возможностям функций [[Generate1DBarcode]] и [[Generate2DBarcode]] непосредственно с веб страницы. Страница содержит краткое описание алгоритма работы запроса и ответа. Демонстрация использует ''XMLHttpRequest'' объект Javascript на стороне браузера. При отсутствии теста ''Captcha'', можно было бы обойтись получением HTTP пакета с png картинкой внутри.&lt;br /&gt;
* Демонстрация [[Пример исполнения программного кода|исполнения произвольного программного кода]] позволяет проверить возможности функции [[ExecEx]]. При исполнении кода в отдельном потоке, на него накладываются дополнительные ограничения для обеспечения безопасности консольного клиента. Процедура исполнения не только ограничена по времени, но и многие опасные функции запрещены к использованию. Весь вывод в лог клиента (в том числе вывод информации об ошибках) перехватывается и направляется на веб страницу, кроме вывода текста, исполняемая программа может отдавать результат в виде картинки, которая тоже будет показана на странице. Страница содержит краткое описание алгоритма работы запроса и ответа. Демонстрация использует ''XMLHttpRequest'' объект Javascript на стороне браузера.&lt;br /&gt;
&lt;br /&gt;
Кроме онлайн демонстраций на сайте доступна [[Демо-версия|демонстрационная версия]] визуального клиента, соединяющаяся с помощью интернета к базе данных, содержащей тестовые данные. Для работы, данную демонстрацию необходимо скачать в виде файла установки и запустить его на локальном компьютере. После установки у Вас появляется возможность работать с тестовой базой данных проекта &amp;quot;Торговля и производство&amp;quot;. Так как работа будет происходить с пакетами, передаваемыми по сети интернет, скорость передачи которой гораздо ниже, чем скорость передачи по локальной сети, а проект предназначен для работы по локальной сети, скорость работы будет сильно замедлена и будет зависеть от скорости передачи пакетов между сервером базы данных и Вашим локальным компьютером. Дополнительное описание ищите на странице скачивания [[Демо-версия|демонстрационной версии]].&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
</feed>