<?xml version="1.0" encoding="cp1251"?>
<?xml-stylesheet type="text/css" href="http://www.pgpru.com/styles/atom.css" media="screen"?>
<rss version="2.0">
<channel>
<title>openPGP в России/Разработки/Движок/ПереработкаПрограммы</title>
<link>http://www.pgpru.com/%D0%E0%E7%F0%E0%E1%EE%F2%EA%E8/%C4%E2%E8%E6%EE%EA/%CF%E5%F0%E5%F0%E0%E1%EE%F2%EA%E0%CF%F0%EE%E3%F0%E0%EC%EC%FB</link>
<description>История изменений документа Разработки/Движок/ПереработкаПрограммы</description>
<copyright>http://www.pgpru.com/%CF%F0%EE%E5%EA%F2/%CF%F0%E0%E2%E8%EB%E0</copyright>
<language>ru</language>
<image>
<title>openPGP в России</title>
<link>http://www.pgpru.com/</link>
<url>http://www.pgpru.com/images/pgpru_banner.gif</url>
<width>88</width>
<height>31</height>
</image>
<item>
<title>Редакция от 05/02/2008 18:17</title>
<link>http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb/show?time=2008-02-05+18%3A17%3A15</link>
<guid isPermaLink="true">http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb</guid>
<description><![CDATA[<div class="pageBefore"></div><div class="page">
<h3>Сравнение редакций документа <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy">Разработки / Движок / Переработка Программы</a> от <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-02-05+18%3A17%3A15">05/02/2008 18:17</a> и <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy">07/02/2008 18:02</a></h3>
<br />
<h2>Удалено:</h2><br />
<div class="deletions"><a name="h20261-1"></a><h3>Типы хэндлеров документов</h3></div><br />
<h2>Добавлено:</h2><br />
<div class="additions"><blockquote> "Человек может иметь столько электронных личностей, на создание скольких ему хватит времени и сил".<br />
<em>- J. S. Donath, "Identity and Deception in the Virtual Community"</em> </blockquote><br />
Если мы исходим из безоговорочного доверия к администрации ресурса, система репутаций имеет смысл лишь с точки зрения функциональности программной платформы, и её реализация представляется опциональной. В то же время, исходя из заявленной модели угрозы, мы не можем всецело положиться на администрацию в части управления контентом и разрешения конфликтов, поскольку такое сделает администрацию единственным рычагом, посредством давления на который противник сможет бесконтрольно оказывать влияние на содержание ресурса.<br />
Поясню, что "администрация" в настоящем контексте &mdash; это исключительно сторона, инициировавшая создание ресурса и осуществляющая его техническую поддержку. Администрация не обязана быть одновременно и контрибьютором материалов, хотя подобное сочетание ролей и нельзя назвать уникальным и, тем более, ограничить его какими-либо программными средствами.<br />
Следует оговориться, что в рассматриваемой модели только намерения противника носят статичный характер: прекратить доступ к той или иной информации, предоставляемой ресурсом. Намерения и интересы администрации могут быть проанализированы лишь в динамике (на игровой основе), и имеют в своей основе поддержание или увеличение ядра пользователей и сохранение ресурса во временн<u>о</u>й перспективе, поскольку предполагаемая цель создания информационного интернет-сайта &mdash; предоставление некоторой информации некоторому (по возможности, наиболее широкому) кругу заинтересованных лиц (что стоит за этой целью &mdash; идейность или коммерческая заинтересованность &mdash; не принципиально, поскольку оба стимула являются достаточными для следования "правилам игры").<br />
Предоставленная сама себе, администрация будет поддерживать баланс этих условий, выражая интересы большинства по модулю своего личного субъективного мнения. Это может выражаться в жёстком цензурировании/удалении наиболее маргинальных материалов (с сопутствующей "текучестью кадров" в группах пользователей, представляющих данные материалы) и мягком цензурировании материалов, не отвечающих позиции администрации (но лишь до той степени, до которой данные материалы не находят поддержку у большинства пользователей; в противном случае администрация сталкивается с риском массового оттока посетителей, что нарушает условия игры и ведёт к проигрышу). Внешнее давление, запугивание и угрозы способны исказить приоритеты администрации с краткосрочного удовлетворения интересов посетителей к долгосрочной выживаемости ресурса, следовательно, навязанная цензура с высокой вероятностью будет принята, несмотря на сопротивление и отток пользователей. (Разумеется, подцензурность значительной доли материалов равносильна уничтожению ресурса. Определить действия администрации в подобной ситуации без учёта всего комплекса "жизненных" факторов не представляется возможным.)<br />
В то же время, нужно подчеркнуть, что сама администрация не может быть заинтересована в установлении и поддержании режима цензуры, противоречащей интересам большинства, поскольку это не будет способствовать выигрышу администрации ни в краткосрочной, ни в долгосрочной перспективе. Следовательно, сама администрация не может являться полноценным нарушителем модели угрозы (за исключением, возможно, предвзятой модерации), и можно рассчитывать на её общее сотрудничество с интересами пользователей. (В ином случае ничто не мешает администрации изначально отказаться от рассматриваемой программной платформы в пользу такой, которая не сможет оказать противодействия любой проводимой политике.)<br />
Отмеченную централизацию власти можно устранить в коллективном управлении контентом. Коллективное управление может выражаться посредством голосований за удаление комментария или документа, запуск/остановку опроса, блокирование пользователя, иные подобные действия. Реализованное в таком виде, коллективное управление открывает простор для сивилловых (sybil) атак: противник, зарегистрировав произвольно большое количество пользователей и используя их для голосований, будет способен влиять на принятие решений и, в итоге, на объём и состав представленный материалов. Модель репутации пользователей способна серьёзно снизить применимость подобной атаки.<br />
Поскольку в компьютеризированном мире затраты времени и энергии на операцию ничтожны (что делает сивилловы атаки возможными), фактором, повышающим порог вхождения следует рассматривать репутацию, основанную на релевантности публикуемой информации с точки зрения людей.<a name="h20261-1"></a><h3>Типы хэндлеров документов (пространства имён)</h3></div></div>
]]></description>
<pubDate>Tue, 05 Feb 2008 18:17:15 +0300</pubDate>
</item>
<item>
<title>Редакция от 03/02/2008 23:42</title>
<link>http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb/show?time=2008-02-03+23%3A42%3A14</link>
<guid isPermaLink="true">http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb</guid>
<description><![CDATA[<div class="pageBefore"></div><div class="page">
<h3>Сравнение редакций документа <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy">Разработки / Движок / Переработка Программы</a> от <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-02-03+23%3A42%3A14">03/02/2008 23:42</a> и <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-02-05+18%3A17%3A15">05/02/2008 18:17</a></h3>
<br />
<h2>Добавлено:</h2><br />
<div class="additions"><ul><li><ul><li> Оптимизированная версия предыдущего варианта. Во-первых, каждая строка БД уже содержит хэш существенных полей данной строки (что избавляет зеркала от необходимости пересчитывать хэши при каждом коммите мастера, который, вероятно, просто пытается их заDoSить). Во-вторых, специальное поле (единственное для таблицы или для всей БД), содержащее XOR всех хэш-значений всех предыдущих коммитов и их счётчик. То есть получается так: когда пользователь вносить изменения в БД, сервер подсчитывает хэш существенных полей данной записи, вносить этот хэш в ту же строку БД, а затем XOR'ит его с текущим значением этого специального поля. В итоге, для полной синхронизации зеркалам нужно только обменяться значениями этого специального поля, сравнить его и счётчик, а полную сверку (описанную в п.2 предыдущего варианта, но с предрассчитанными хэшами) проводить только в случае расхождений.</li></ul></li></ul><a name="h20261-1"></a><h3>Репутационная система</h3></div></div>
]]></description>
<pubDate>Sun, 03 Feb 2008 23:42:14 +0300</pubDate>
</item>
<item>
<title>Редакция от 03/02/2008 14:46</title>
<link>http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb/show?time=2008-02-03+14%3A46%3A49</link>
<guid isPermaLink="true">http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb</guid>
<description><![CDATA[<div class="pageBefore"></div><div class="page">
<h3>Сравнение редакций документа <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy">Разработки / Движок / Переработка Программы</a> от <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-02-03+14%3A46%3A49">03/02/2008 14:46</a> и <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-02-03+23%3A42%3A14">03/02/2008 23:42</a></h3>
<br />
<h2>Добавлено:</h2><br />
<div class="additions"><ul><li><ul><li><ul><li> <span class="cl-green">Заверение операций клиента его открытым ключом, предоставление доказательств зеркалам</span><br />
<ul><li> <span class="cite">MITM-подмена ключа, впервые загружаемого пользователем, при его передаче от мастера к зеркалам</span><br />
</li></ul></li><li> Приведённую выше MITM-подмену ключа на точке входа можно обобщить на любые впервые вводимые данные. Так, если правила аутентификации операций над объектом не закреплены мандатно, их добровольная установка может быть подделана мастер-сервером, и зеркала об этом никогда не узнают. (По-русски: предположим, требование о заверении всех операций с помощью ключей не установлено на сайте глобально; пользователь создаёт новый документ и включает это свойство локально для данной страницы. Но, независимо от желания пользователя, мастер-сервер не рассылает это обновление зеркалам, поэтому может и впредь любым образом модифицировать документ, бесконтрольно отправляя зеркалам злоумышленные редакции.) <em>Решение пока неизвестно.</em></li></ul></li></ul></li></ul></div></div>
]]></description>
<pubDate>Sun, 03 Feb 2008 14:46:49 +0300</pubDate>
</item>
<item>
<title>Редакция от 01/02/2008 19:22</title>
<link>http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb/show?time=2008-02-01+19%3A22%3A27</link>
<guid isPermaLink="true">http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb</guid>
<description><![CDATA[<div class="pageBefore"></div><div class="page">
<h3>Сравнение редакций документа <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy">Разработки / Движок / Переработка Программы</a> от <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-02-01+19%3A22%3A27">01/02/2008 19:22</a> и <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-02-03+14%3A46%3A49">03/02/2008 14:46</a></h3>
<br />
<h2>Удалено:</h2><br />
<div class="deletions"><a name="h20261-1"></a><h3>Имеет ли смысл встроенная функция зеркалирования данных между несколькими сайтами или её стоит решать сторонними средствами?</h3>
Если встраивать функцию, то:<br />
<ul><li> Аутентификация и шифрование данных, передаваемых между зеркалами, ключами OpenPGP. Что гарантирует защиту на канале связи, но не способствует защите от захвата хоста и отравления зеркал.</li></ul></div><br />
<h2>Добавлено:</h2><br />
<div class="additions"><a name="h20261-1"></a><h3>Антицензурный механизм</h3>
Репликация данных между сетью зеркал &mdash; это, по существу, единственный доступный на текущем этапе [ограниченный] антицензурный механизм. Ограничен он тем, что не в состоянии контролировать аутентичность приложения на каждом из зеркал, благодаря чему каждое зеркало в отдельности может лгать пользователям, выдавая не ту информацию, которая содержится в синхронизируемой с другими зеркалами БД. Полноценное решение &mdash; это клиентская программа, выполняющая весь ввод/вывод данных в БД зеркал, снимая с них задачу веб-сервера. Но следует отдать себе отчёт в том, что само такое решение не является универсальным и может быть реализовано только на более поздних этапах, если в принципе будет найдено целесообразным.<br />
Текущее ограниченное решение заключается в том, чтобы "сверить часы" (или базы) зеркал перед коммитом изменений от мастер-сервера. Допустим, пользователь зашёл на сайт и внёс изменение в текст документа; вот что примерно должно происходить (это набросок, а не законченный протокол):<br />
<ol type="1"><li> Мастер-сервер (где находится пользователь) извлекает из своей БД записи с <em>n-i</em> по <em>n+i</em> (где <em>n</em> &mdash; номер отредактированной пользователем записи, <em>i</em> &mdash; некоторое небольшое число), сериализует их и хэширует результат.
</li><li> Мастер-сервер рассылает зеркалам параметры операции (<em>n, i,</em> тип выполняемого пользователем действия).
</li><li> Зеркала повторяют операцию мастер-сервера со своими БД, заверяют полученные хэши своими закрытыми ключами и возвращают результат мастер-серверу.
</li><li> Мастер подсчитывает "голоса" (каждое уникальное значение хэша) и сравнивает превалирующий хэш с собственным, полученным на этапе 1:
<ul><li> Если хэш мастера совпадает с большинством, он выполняет коммит зеркалам, передавая как введённые пользователем данные, так и все заверенные хэши, полученные от зеркал на этапе 3, и включая собственный. (Зеркала перед вводом данных в БД должны проверить правильность подсчётов мастера и отказать в коммите, если он лжёт.)
</li><li> Если хэш мастера не совпадает с большинством, он запрашивает спорные записи у одного из зеркал с "правильным" хэшем, коммитит их в свою базу и перезапускает процесс с этапа 2.
</li><li> Если все зеркала не имеют полного консенсуса относительно состояния базы, "меньшевики" по полученным от мастера заверенным хэшам также смогут определить, что у них что-то не так, и запросить "правильную" копию.</li></ul></li></ol>
(Здесь не учтён ряд пограничных случаев типа спорного голосования пополам, полного отсутствия консенсуса и пр. Также пока непонятно, как быть с race conditions, если все зеркала равноправны, и два пользователя одновременно правят один и тот же документ или два соседних на разных зеркалах.)<br />
Цель этого процесса в том, чтобы зеркала могли обнаружить, когда одно из них по той или иной причине выходит из синхронизации (например, по причине цензуры). Если одно из зеркал остаётся рассинхронизированным в течение долгого срока, другие зеркала могут исключить его из сети.<br />
Вот проблемы и ограничения предложенной схемы:<br />
<ol type="1"><li> Как было отмечено, она не способна решить проблему с модификацией самой программы. В подобном случае одно из зеркал (или несколько) может поддерживать две базы: одну, используемую только для синхронизации, и другую, отцензурированную, данные из которой и отображаются пользователям. Описанный механизм является ограниченной мерой; адекватно устранить это ограничение можно лишь перенеся функции отрисовки и отображения данных на сторону клиента.
</li><li value="2"> Скрытная модификация на одном из зеркал тех записей БД, которые обычно редко редактируются пользователями (или не редактируются совсем) и не имеют часто редактируемых соседей, так что подобное искажение может никогда не обнаружиться исполнением приведённого выше протокола. Решения:
<ul><li> <s>Большое значение <em>i</em>, дабы каждым коммитом охватывать большее число соседних записей. Что, в свою очередь, означает дополнительную нагрузку на узлы при хэшировании большего объёма данных.</s> В любом случае, само по себе такое решение не является полным.
</li><li> Периодическое блокирование БД, хэширование всего содержимого и сравнение результатов между зеркалами. Собственные проблемы:
<ol type="1"><li> Необходимость в синхронизации этого действа. В принципе, не слишком большая проблема (команду о выполнении полной проверки может рассылать один из узлов, получив которую, все начинают подготовку).
</li><li> Выявление спорных участков БД. Тоже решаемая задача: хэшировать блоки записей (скажем, по 100 строк), а затем &mdash; сам полученный набор хэшей. Такая схема позволит даже выполнять полную проверку в несколько этапов, дабы не останавливать работу сайта на длительный срок.
</li></ol></li></ul></li><li value="3"> В принципе, ничто не мешает мастеру коммитить любые изменения, отравляя зеркала, покуда эта отрава будет синхронизирована между зеркалами (т.е. схема защищает только от скрытной модификации БД без ведома админа сервера, но не от целенаправленных действий админа). Решения:
<ul><li> Зеркала могут проверять вводимые данные против текущего состояния системы (например, мог ли данный пользователь отредактировать данную страницу, учитывая его привилегии и ACL документа), но такой механизм крайне легко обойти: просто лгать (выбрать пользователя с наивысшей репутацией/привилегиями и "править" документ от его имени).
</li><li> Аутентификация пользовательского действия ключом PGP (это то, что зеркала могут объективно проверить). Хотя аутентификация большинства действий кажется тривиальной, более серьёзное размышление вырисовывает ряд попутных проблем:
<ol type="1"><li> Атаки с повторной передачей, если заверять один только текст документа (как сейчас) без каких-либо метаданных. Решение:
<ul><li> Первые строчки документа должны содержать декларацию, логически привязывающую текст к данному применению (например, это может быть адрес документа и номер последней редакции). Такое доказательство зеркала могут принять.
</li></ul></li><li> Трудности с аутентификацией действий, отличных от ввода простого контента, к примеру, изменений настроек или ACL документа. Решение:
<ul><li> В подобных случаях сервер может сериализовать действие пользователя (представить его в виде понятного пользователю текстового набора команд плюс значения счётчика для защиты от повторной передачи), которое последний и должен заверить цифровой подписью.
</li></ul></li><li> Существует некоторый класс часто повторяемых действий, постоянная аутентификация которых может свести пользователя с ума. В частности, это работа с репутационной системой. <em>(Следует учитывать, что это в немалой степени зависит от конкретного дизайна такой системы. Пока я рассматриваю идею с "плюсами" и "минусами", которые участники могут расставлять объектам системы, оказывая тем самым влияние на рейтинг владельцев этих объектов. Более подробно данный вопрос будет рассмотрен отдельно, поскольку требует учёта ряда "трудных" ситуаций, как то "правильную" оценку редакций документов.)</em> Решение:
<ul><li> Не требовать аутентифицировать <u>каждое</u> такое действие, а только накапливать их в виде простых команд, которые пользователь в любой момент может заверить скопом. Такой подход требует особого внимания к пользовательскому интерфейсу, поскольку пользователь может покинуть сайт, не произведя заверение команд, и они будут просто потеряны (правда, можно и сохранять их в БД до следующего визита пользователя)...
</li></ul></li><li> Главная сложность возникает на точке входа. Хотя аутентичность последующих изменений БД можно проконтролировать с помощью описанных мер, у зеркал не может быть гарантии, что первая загрузка открытого ключа пользователя в действительности выполнена им самим, и ключ принадлежит пользователю. Ничто не мешает мастеру MITM'ить ключи всех пользователей. Решения:
<ul><li> <s>Загрузив ключ на мастер, пользователь может обойти зеркала и проверить, что на них также находится его ключ.</s> Но как он в случае подлога докажет зеркалам, что это и впрямь не его ключ?
</li><li> На странице загрузки ключа помещать несколько самостоятельных веб-форм, каждая выполняющая POST-запрос на соответствующее зеркало. Дёшево и сердито, зато работает.
</li></ul></li></ol><em>Не окажется ли, что способы решения вышеназванных проблем превратят всю систему в мертворождённого ребёнка, сделав её практически непригодной к использованию? С другой стороны, множество механизмов безопасности, в том числе и аутентификация пользовательских действий, могут быть опциональны и применяться лишь на ограниченном наборе документов (или быть локализованы по иному признаку).</em></li></ul></li></ol></div></div>
]]></description>
<pubDate>Fri, 01 Feb 2008 19:22:27 +0300</pubDate>
</item>
<item>
<title>Редакция от 26/01/2008 00:47</title>
<link>http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb/show?time=2008-01-26+00%3A47%3A00</link>
<guid isPermaLink="true">http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb</guid>
<description><![CDATA[<div class="pageBefore"></div><div class="page">
<h3>Сравнение редакций документа <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy">Разработки / Движок / Переработка Программы</a> от <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-01-26+00%3A47%3A00">26/01/2008 00:47</a> и <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-02-01+19%3A22%3A27">01/02/2008 19:22</a></h3>
<br />
<h2>Добавлено:</h2><br />
<div class="additions"><small>Пояснения: <strong><span class="cite">задача противника (класс атак)</span></strong>, <span class="cite">вектор атаки</span>, <strong><span class="cl-green">класс защиты</span></strong>, <span class="cl-green">контрмера, отражающая атаку или изменяющая её вектор</span>, <span class="cl-blue">рекомендация / вне контроля приложения</span>. Стрелки в обозначениях классов внутри дерева &mdash; это ссылки на раскрытые деревья данных классов.</small><br />
<ul><li> <strong><span class="cite">Искажение информации на страницах сайта</span></strong><br />
<ul><li> <span class="cite">Правка открытых страниц</span><br />
<ul><li> <span class="cl-green">Ограничение доступа на запись с помощью списков ACL</span><br />
<ul><li> <strong><span class="cite">Повышение привилегий <a href="#escal" name="oescal">--></a></span></strong><br />
</li></ul></li></ul></li><li> <strong><span class="cite">Несанкционированный доступ к базе данных <a href="#db" name="odb">--></a></span></strong><br />
</li><li> <span class="cite">Злоупотребление привилегиями (безосновательное удаление/модификация документов)</span><br />
<ul><li> <strong><span class="cl-green">Репликация данных БД между независимыми серверами <a href="#mirr" name="omirr">--></a></span></strong><br />
</li><li> <span class="cl-green">Открытая модерация</span><br />
<ul><li> <span class="cite">Сивиллова атака</span><br />
<ul><li> <span class="cl-green">Репутационная система</span><br />
</li></ul></li></ul></li></ul></li></ul></li><li> <!--notypo--><a name="priv" href="#priv" title=""></a>
<!--/notypo--><strong><span class="cite">Раскрытие данных</span></strong><br />
<ul><li> <span class="cite">Компрометация документов пользователями системы</span><br />
<ul><li> <span class="cl-green">Ограничение доступа на чтение с помощью списков ACL</span><br />
<ul><li> <strong><span class="cite">Повышение привилегий <a href="#escal" name="oescal">--></a></span></strong><br />
</li></ul></li></ul></li><li> <strong><span class="cite">Несанкционированный доступ к базе данных <a href="#db" name="odb">--></a></span></strong><br />
</li></ul></li><li> <!--notypo--><a name="soc" href="#soc" title=""></a>
<!--/notypo--><strong><span class="cite">Социальная инженерия</span></strong><br />
<ul><li> <span class="cite">Имперсонация, дискредитация пользователей</span><br />
<ul><li> <span class="cl-green">Запрет регистрации похожих никнэймов</span><br />
</li></ul></li></ul></li><li> <!--notypo--><a name="dos" href="#dos" title=""></a>
<!--/notypo--><strong><span class="cite">Отказ в обслуживании</span></strong><br />
<ul><li> <span class="cite">SYN-flood и т.п.</span><br />
<ul><li> <span class="cl-blue">Брандмауэр, тюнинг сетевого стека</span><br />
</li></ul></li><li> <span class="cite">Уничтожение сервера</span><br />
<ul><li> <strong><span class="cl-green">Репликация данных БД между независимыми серверами <a href="#mirr" name="omirr">--></a></span></strong><br />
</li></ul></li><li> <span class="cite">Паразитные запросы</span><br />
<ul><li> <span class="cl-green">Кэширование данных</span><br />
</li><li> <span class="cl-green">Flood-control (блокирование паразитирующих хостов)</span><br />
</li><li> <span class="cl-green">Ограниченная балансировка нагрузки между зеркалами</span><br />
</li></ul></li></ul></li><li> <!--notypo--><a name="escal" href="#escal" title=""></a>
<!--/notypo--><strong><span class="cite">Повышение привилегий</span></strong><br />
<ul><li> <span class="cite">Использование реквизитов доступа привилегированного пользователя</span><br />
<ul><li> <span class="cite">Захват идентификатора авторизованной сессии</span><br />
<ul><li> <span class="cl-green">Передача идентификатора только через cookie</span><br />
</li><li> <span class="cl-green">Жёсткое ограничение продолжительности сессии</span><br />
</li><li> <span class="cl-green">Привязка к IP</span><br />
</li><li> <span class="cite">Cross-site scripting</span><br />
<ul><li> <span class="cl-green">Контроль и санитизация вывода</span><br />
</li></ul></li><li> <span class="cite">Перехват на канале связи</span><br />
<ul><li> <span class="cl-green">SSL</span><br />
</li></ul></li><li> <strong><span class="cite">Несанкционированный доступ к базе данных <a href="#db" name="odb">--></a></span></strong><br />
<ul><li> <span class="cl-green">Хэширование идентификаторов сессий в БД</span><br />
</li></ul></li></ul></li><li> <span class="cite">Компрометация пароля</span><br />
<ul><li> <span class="cl-green">Привязка к IP</span><br />
</li><li> <span class="cite">Перехват на канале связи</span><br />
<ul><li> <span class="cl-green">SSL</span><br />
</li><li> <span class="cl-green">Методы аутентификации без раскрытия секрета (по открытому ключу)</span><br />
</li></ul></li><li> <strong><span class="cite">Несанкционированный доступ к базе данных <a href="#db" name="odb">--></a></span></strong><br />
<ul><li> <span class="cl-green">Хранение в БД хэшированных паролей с привязкой (salt)</span><br />
</li></ul></li><li> <span class="cite">Полный перебор</span><br />
<ul><li> <span class="cl-green">Контроль сложности паролей</span><br />
</li><li> <span class="cl-green">Ограничение неудачных попыток</span><br />
</li></ul></li></ul></li></ul></li><li> <span class="cite">Эксплуатация бреши в приложении</span><br />
</li></ul></li><li> <!--notypo--><a name="db" href="#db" title=""></a>
<!--/notypo--><strong><span class="cite">Несанкционированный доступ к базе данных</span></strong><br />
<ul><li> <span class="cl-green">Клиентское заверение данных с помощью ЭЦП</span><br />
</li><li> <span class="cl-green">Клиентское шифрование данных открытым ключом</span><br />
</li><li> <strong><span class="cl-green">Репликация данных БД между независимыми серверами <a href="#mirr" name="omirr">--></a></span></strong><br />
</li><li> <span class="cite">SQL-инъекция</span><br />
<ul><li> <span class="cl-green">Санитизация пользовательского ввода</span><br />
</li></ul></li><li> <span class="cite">Удалённый доступ к SQL-серверу / административной оболочке (phpMyAdmin) с помощью пароля БД</span><br />
<ul><li> <span class="cl-blue">Запрет подключений к SQL-серверу от нелокальных хостов</span><br />
</li><li> <span class="cl-green">Модульная реализация, границы доверия, предотвращение выхода критических данных (пароля БД и т.п.) за пределы доверенных зон</span><br />
</li></ul></li><li> <span class="cite">Физический доступ к серверу базы данных</span><br />
</li></ul></li><li> <!--notypo--><a name="serv" href="#serv" title=""></a>
<!--/notypo--><strong><span class="cite">Несанкционированная модификация приложения</span></strong><br />
<ul><li> <span class="cite">Запись на диск и в память, переопределение свойств и функций посредством выполнения произвольного кода через брешь в приложении</span><br />
<ul><li> <span class="cl-green">Компартментация кода, границы доверия, предотвращение выхода критических данных за пределы доверенных зон</span><br />
</li><li> <span class="cl-green">Отсутствие процедур сериализации/десериализации объектов за пределами доверенных зон</span><br />
</li><li> <span class="cl-green">Отсутствие вызовов <tt>eval()</tt> за пределами доверенных зон</span><br />
</li></ul></li><li> <span class="cite">Непосредственный доступ к ФС сервера приложения (SSH, физический доступ)</span><br />
</li></ul></li><li> <!--notypo--><a name="mirr" href="#mirr" title=""></a>
<!--/notypo--><strong><span class="cl-green">Репликация данных БД между независимыми серверами</span></strong><br />
<ul><li> <span class="cite">Модификация/компрометация реплицируемых данных на канале связи</span><br />
<ul><li> <span class="cl-green">Криптографический контроль целостности и конфиденциальности</span><br />
</li></ul></li><li> <span class="cite">Компрометация нешифрованных данных зеркалами</span><br />
</li><li> <span class="cite">Отравление зеркал путём искажения БД мастер-сервера</span> (мастер-сервер &mdash; сервер реплицирующий свою БД, независимо от того, централизованная это схема или децентрализованная с равноправными зеркалами)<br />
<ul><li> <span class="cl-green">Контроль целостности мастер-БД через запрос хэшей изменяемых записей или хэшей записей, предшествующих вставляемым, от зеркал и определение "правильности" по превалирующему значению хэшей</span><br />
<ul><li> <strong><span class="cite">Несанкционированная модификация приложения <a href="#serv" name="oserv">--></a></span></strong><br />
</li><li> <span class="cite">Сговор зеркал для искажения БД мастер-сервера</span><br />
</li><li> <span class="cite">Искажение БД всех зеркал с целью блокирования консенсуса</span><br />
</li></ul></li></ul></li><li> <span class="cite">Отравление зеркал целенаправленными действиями мастер-сервера</span></li></ul></li></ul></div></div>
]]></description>
<pubDate>Sat, 26 Jan 2008 00:47:00 +0300</pubDate>
</item>
<item>
<title>Редакция от 16/01/2008 22:47</title>
<link>http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb/show?time=2008-01-16+22%3A47%3A12</link>
<guid isPermaLink="true">http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb</guid>
<description><![CDATA[<div class="pageBefore"></div><div class="page">
<h3>Сравнение редакций документа <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy">Разработки / Движок / Переработка Программы</a> от <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-01-16+22%3A47%3A12">16/01/2008 22:47</a> и <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-01-26+00%3A47%3A00">26/01/2008 00:47</a></h3>
<br />
<h2>Добавлено:</h2><br />
<div class="additions"><a name="h20261-1"></a><h3>Профиль использования</h3>
<ul><li> <strong>Базовые условия:</strong>
<ul><li> Wiki, свободное участие посетителей в развитии материалов.
</li><li> Спорность, неоднозначность многих материалов.
</li><li> Враждебность окружения.
</li></ul></li><li> <strong>Регулярный веб-хостинг.</strong>
<ul><li> Стандартное окружение и среда исполнения: Linux/BSD, Apache, CGI, Python, MySQL.
</li><li> Отсутствие контроля над средой исполнения и хранилищем данных.
</li></ul></li><li> <strong>Скрытый сервис сети Tor.</strong>
<ul><li> Высокая вероятность отказа, пропадания ресурса без объявления причин.
</li><li> Крайне низкая производительность сетевого соединения.
</li></ul></li><li> <strong>Сайт правозащитной направленности.</strong>
<ul><li> Риск навязывания цензуры администрации сайта; цензурирование материалов без ведома администрации.
</li><li> Принуждение администрации к раскрытию информации; правовое и внеправовое давление.</li></ul></li></ul></div></div>
]]></description>
<pubDate>Wed, 16 Jan 2008 22:47:12 +0300</pubDate>
</item>
<item>
<title>Редакция от 14/01/2008 01:06</title>
<link>http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb/show?time=2008-01-14+01%3A06%3A23</link>
<guid isPermaLink="true">http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb</guid>
<description><![CDATA[<div class="pageBefore"></div><div class="page">
<h3>Сравнение редакций документа <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy">Разработки / Движок / Переработка Программы</a> от <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-01-14+01%3A06%3A23">14/01/2008 01:06</a> и <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-01-16+22%3A47%3A12">16/01/2008 22:47</a></h3>
<br />
<h2>Добавлено:</h2><br />
<div class="additions"><a name="h20261-1"></a><h3>Предотвращение race conditions. Атомарные операции</h3>
<ul><li> Логические блокировки (мютексы) записей БД при мультитранзакционных операциях.
<ul><li> Особенно важное условие при действующей структуре БД (пока спасала лишь невысокая посещаемость сайта), но принципиально не удастся избежать всех возможных узких мест даже с переработанной структурой.
</li><li> Возможно ли обеспечить блокировку лишь средствами БД (выделив под размещение мютексов специальную таблицу)? Похоже, что <tt>LOCK TABLES</tt> в MySQL исключит появление race'а уже в установке/проверке самих мютексов разными потоками. С другой стороны, при таком подходе вообще отпадает потребность в самодельных средствах блокировки. <em>Требует дальнейшего изучения. Важно соблюсти баланс производительности и атомарности операций.</em></li></ul></li></ul></div></div>
]]></description>
<pubDate>Mon, 14 Jan 2008 01:06:23 +0300</pubDate>
</item>
<item>
<title>Редакция от 12/01/2008 22:37</title>
<link>http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb/show?time=2008-01-12+22%3A37%3A30</link>
<guid isPermaLink="true">http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb</guid>
<description><![CDATA[<div class="pageBefore"></div><div class="page">
<h3>Сравнение редакций документа <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy">Разработки / Движок / Переработка Программы</a> от <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-01-12+22%3A37%3A30">12/01/2008 22:37</a> и <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-01-14+01%3A06%3A23">14/01/2008 01:06</a></h3>
<br />
<h2>Удалено:</h2><br />
<div class="deletions"><ul><li><ul><li> <tt>domain.com/pagename:[type]:[handler][@lang]</tt>. Не вызовет проблем с одноимёнными страницами, поскольку определения типа и хэндлера явно отделены от URL нетипичным символом. Определение языка должно иметь уникальный разделитель, дабы не создавать двусмысленности при опущенных определениях типа и хэндлера. Минус: не слишком элегантный URL с кучей служебных символов (а ведь дальше могут следовать параметры GET-запроса).</li></ul></li></ul>
Характеристики:</div><br />
<h2>Добавлено:</h2><br />
<div class="additions"><ul><li><ul><li> <tt>domain.com/pagename:[type]:[handler][@lang]</tt>. Не вызовет проблем с одноимёнными страницами, поскольку определения типа и хэндлера явно отделены от URL нетипичным символом. Определение языка должно иметь уникальный разделитель, дабы не создавать двусмысленности при опущенных определениях типа и хэндлера. Минус: не слишком элегантный URL с кучей служебных символов (а ведь дальше могут следовать параметры GET-запроса). <em>Приоритетный вариант, если не придумается что-нибудь лучше.</em></li></ul></li></ul>
Реализация на втором этапе (отдалённая перспектива). Характеристики:</div></div>
]]></description>
<pubDate>Sat, 12 Jan 2008 22:37:30 +0300</pubDate>
</item>
<item>
<title>Редакция от 12/01/2008 22:33</title>
<link>http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb/show?time=2008-01-12+22%3A33%3A50</link>
<guid isPermaLink="true">http://www.pgpru.com/%25d0%25e0%25e7%25f0%25e0%25e1%25ee%25f2%25ea%25e8/%25c4%25e2%25e8%25e6%25ee%25ea/%25cf%25e5%25f0%25e5%25f0%25e0%25e1%25ee%25f2%25ea%25e0%25cf%25f0%25ee%25e3%25f0%25e0%25ec%25ec%25fb</guid>
<description><![CDATA[<div class="pageBefore"></div><div class="page">
<h3>Сравнение редакций документа <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy">Разработки / Движок / Переработка Программы</a> от <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-01-12+22%3A33%3A50">12/01/2008 22:33</a> и <a href="http://www.pgpru.com/razrabotki/dvizhok/pererabotkaprogrammy?time=2008-01-12+22%3A37%3A30">12/01/2008 22:37</a></h3>
<br />
<h2>Удалено:</h2><br />
<div class="deletions"><ul><li> Характеристики:
<ul><li> Безопасный IPC-интерфейс для связи с процессом GnuPG (реализован в Enigmail).
</li><li> Автоматическая обработка пересылаемых POST-данных (реализовано в Enigform).
</li><li> Шифрование передаваемых данных (реализовано в FireGPG).
</li><li> Policy-centric-управление посредством подписанных хидеров в HTTP-ответе сервера (<span class="cite">обосновать необходимость</span>).</li></ul></li></ul></div><br />
<h2>Добавлено:</h2><br />
<div class="additions">Характеристики:<br />
<ul><li> Безопасный IPC-интерфейс для связи с процессом GnuPG (реализован в Enigmail).
</li><li> Автоматическая обработка пересылаемых POST-данных (реализовано в Enigform).
</li><li> Шифрование передаваемых данных (реализовано в FireGPG).
</li><li> Policy-centric-управление посредством подписанных хидеров в HTTP-ответе сервера <span class="cite">(обосновать необходимость)</span>.</li></ul><a name="h20261-1"></a><h2>Формализация</h2><a name="h20261-2"></a><h3>Модель угрозы</h3></div></div>
]]></description>
<pubDate>Sat, 12 Jan 2008 22:33:50 +0300</pubDate>
</item>
</channel>
</rss>
