Для меня как потребителя внутренняя кухня биллинга не имеет существенного значения, пусть они там хоть голубиной почтой пересылают, лишь бы голуби шифрованные были и не разбалтывали как попугаи конфиденциальные данные.
1. Формат RSS имеет технические средства чтобы отметить feed как приватный и в этом случае он не палится другими пользователям Google Reader, только если сам пользователь не расшарил это. Таким образом реализована например подписка на хабраленту. Так что это или разработчики банка слажали с не отметили feed как приватный, или пользователь сам его зашарил.
2. Даже если пользователь отписался от feed`а в Google Reader`е, то он всё равно продолжает индексироваться. Так что просто отписаться недостаточно — нужно чтобы по старому скомпрометированному адресу перестала отдаваться приватная информация.
> Я также попытался воспроизвести ее на виртуальной машине под Windows XP(так как он был самый простой способ получить PHP с недостатками генератора случайных чисел), с успехом, конечно же. Поскольку на этих двух машинах я получил много коллизий, то скорей всего даже на более совершенных системах ошибка может быть использована с некоторым усилием. Ну и где же результаты ваших тестов?
Я сгенерировал при помощи функции, в которой вы нашли «коллизии» 10 миллионов псевдослучайных значений и прогнал через уникализатор — не было ни одной коллизии, и это при том, что я намерянно допустил вашу ошибку №4 и сгенерировал это всё в рамках 2х сессий (по 5 млн) и даже не инициализируя генератор случайных чисел!
Согласитесь что 10 000 000 попыток авторизации это достаточно много чтобы система автоматически заблокировала IP ну или администратор увидел неладное.
0. Добавляете в свой унаследованный класс smarty поле is_page
public $is_page = false;
1. создаёте smarty-функцию {eop}
/**
* End Of Page
* @return
* @param object $params
* @param object $smarty
*/
function smarty_function_eop($params, &$smarty)
{
$smarty->is_page = true;
}
2. В конце главного шаблона вызываете функцию:
</body>
</html>
{eop}
3. В самом начале output фильтра проверяете, а не конец ли страницы
function smarty_outputfilter_head($tpl_output, &$smarty)
{
if (!$smarty->is_page)
return $tpl_output;
…
}
4. Правите smarty_block_extends:
function smarty_block_extends($params, $content, $smarty, $repeat)
{
/** Никому не доверяйте. Даже себе! */
if (false === array_key_exists('template', $params)) {
$smarty->trigger_error('Укажите шаблон, от которого наследуетесь!');
}
if (!$repeat)
return $smarty->fetch('pages/'.$params['template']);
}
0. Добавляете в свой унаследованный класс smarty поле is_page
public $is_page = false;
1. создаёте smarty-функцию {eop}
/**
* End Of Page
* @return
* @param object $params
* @param object $smarty
*/
function smarty_function_eop($params, &$smarty)
{
$smarty->is_page = true;
}
2. В конце главного шаблона вызываете функцию:
{eop}
3. В самом начале output фильтра проверяете, а не конец ли страницы
function smarty_outputfilter_head($tpl_output, &$smarty)
{
if (!$smarty->is_page)
return $tpl_output;
…
}
4. Правите smarty_block_extends:
function smarty_block_extends($params, $content, $smarty, $repeat)
{
/** Никому не доверяйте. Даже себе! */
if (false === array_key_exists('template', $params)) {
$smarty->trigger_error('Укажите шаблон, от которого наследуетесь!');
}
if (!$repeat)
return $smarty->fetch('pages/'.$params['template']);
}
Интересен не сам факт сбоя, а отношение представителя компании к факту нарушения конфиденциальности клиентов — типа основные услуги мы предоставляем, а остальное нас не волнует. И в большинстве компаний с которыми я общался по этому вопросу тоже не особо запариваются по этому поводу.
Буквально неделю назад обнаружил на сайте крупной торговой сети список с персональными данными их клиентов (ФИО, телефон, email, день рождения...). Попытался написать им об утечке через контактный email указанный на самом сайте, на что получил ответ от почтового сервера, что этот email не существует. Хорошо что компания разработчик этого сайта оказалась более доступной и к их чести в течении 5 минут они закрыли доступ и отписались что «да мол бы косяк, устранили».
Года три назад мне на телефон вечером пришло SMS сообщение примерно такого содержания от неизвестного мне отправителя:
1. Привет Маша, давно не виделись, как у тебя сейчас дела, чем занимаешься?
т.к. я не Маша, я подумал что ошиблись номер и временно проигнорировал это сообщение. Спустя несколько минут пришло второе сообщение с другого номера:
2. Привет, Петя! Действительно не виделись очень давно, я женилась, надо бы встретиться, пообщаться.
Таким образом в течении получаса мне пришло порядка 5 сообщений из их переписки. Я как порядочный человек набрал телефон поддержки сотового оператора и сообщил что мне приходят копии SMS сообщений незнакомых мне людей, на что представитель оператора сказал мне:
«а вы их игнорируйте, просто не отвечайте и всё». И только на мой вопрос, что неужели оператора не интересует конфиденциальность переписки его абонентов они нехотя спросили мой номер и номера с которых приходят копии.
Спустя только года 2 от человека который в теме я узнал что был сбой и многие сообщения уходили на левые номера.
xname.org имеет и другую неприятную особенность: авторизационный ключ передаётся GET-параметром, но при Logout`е он не удаляется в базе и сессия не завершается — просто идёт переход на главную страницу. Таким образом если в истории посещений браузера остались адреса внутренних страниц, то можно авторизоваться без пароля.
2. Даже если пользователь отписался от feed`а в Google Reader`е, то он всё равно продолжает индексироваться. Так что просто отписаться недостаточно — нужно чтобы по старому скомпрометированному адресу перестала отдаваться приватная информация.
Если бы вы были моим сисадмином я бы на вас молился!
Прогнал тест по ссылке discover-symfony.blogspot.com/2010/07/achtung-sfguardplugin-symfony.html — у меня снова без коллизий, подозреваю что проблема в том, что я это делал в linux, а ребята в windows. Как всё таки важно правильно выбрать хостинг :)
Ну и где же результаты ваших тестов?
Я сгенерировал при помощи функции, в которой вы нашли «коллизии» 10 миллионов псевдослучайных значений и прогнал через уникализатор — не было ни одной коллизии, и это при том, что я намерянно допустил вашу ошибку №4 и сгенерировал это всё в рамках 2х сессий (по 5 млн) и даже не инициализируя генератор случайных чисел!
Согласитесь что 10 000 000 попыток авторизации это достаточно много чтобы система автоматически заблокировала IP ну или администратор увидел неладное.
Можете попробовать сами:
Полученный файл на 320 Мб прогоняем через поиск дубликатов: cat out.txt | sort | uniq -dc
Топикстартер, жду ваш тест.
0. Добавляете в свой унаследованный класс smarty поле is_page
public $is_page = false;
1. создаёте smarty-функцию {eop}
/**
* End Of Page
* @return
* @param object $params
* @param object $smarty
*/
function smarty_function_eop($params, &$smarty)
{
$smarty->is_page = true;
}
2. В конце главного шаблона вызываете функцию:
</body>
</html>
{eop}
3. В самом начале output фильтра проверяете, а не конец ли страницы
function smarty_outputfilter_head($tpl_output, &$smarty)
{
if (!$smarty->is_page)
return $tpl_output;
…
}
4. Правите smarty_block_extends:
function smarty_block_extends($params, $content, $smarty, $repeat)
{
/** Никому не доверяйте. Даже себе! */
if (false === array_key_exists('template', $params)) {
$smarty->trigger_error('Укажите шаблон, от которого наследуетесь!');
}
if (!$repeat)
return $smarty->fetch('pages/'.$params['template']);
}
0. Добавляете в свой унаследованный класс smarty поле is_page
public $is_page = false;
1. создаёте smarty-функцию {eop}
/**
* End Of Page
* @return
* @param object $params
* @param object $smarty
*/
function smarty_function_eop($params, &$smarty)
{
$smarty->is_page = true;
}
2. В конце главного шаблона вызываете функцию:
{eop}
3. В самом начале output фильтра проверяете, а не конец ли страницы
function smarty_outputfilter_head($tpl_output, &$smarty)
{
if (!$smarty->is_page)
return $tpl_output;
…
}
4. Правите smarty_block_extends:
function smarty_block_extends($params, $content, $smarty, $repeat)
{
/** Никому не доверяйте. Даже себе! */
if (false === array_key_exists('template', $params)) {
$smarty->trigger_error('Укажите шаблон, от которого наследуетесь!');
}
if (!$repeat)
return $smarty->fetch('pages/'.$params['template']);
}
Буквально неделю назад обнаружил на сайте крупной торговой сети список с персональными данными их клиентов (ФИО, телефон, email, день рождения...). Попытался написать им об утечке через контактный email указанный на самом сайте, на что получил ответ от почтового сервера, что этот email не существует. Хорошо что компания разработчик этого сайта оказалась более доступной и к их чести в течении 5 минут они закрыли доступ и отписались что «да мол бы косяк, устранили».
1. Привет Маша, давно не виделись, как у тебя сейчас дела, чем занимаешься?
т.к. я не Маша, я подумал что ошиблись номер и временно проигнорировал это сообщение. Спустя несколько минут пришло второе сообщение с другого номера:
2. Привет, Петя! Действительно не виделись очень давно, я женилась, надо бы встретиться, пообщаться.
Таким образом в течении получаса мне пришло порядка 5 сообщений из их переписки. Я как порядочный человек набрал телефон поддержки сотового оператора и сообщил что мне приходят копии SMS сообщений незнакомых мне людей, на что представитель оператора сказал мне:
«а вы их игнорируйте, просто не отвечайте и всё». И только на мой вопрос, что неужели оператора не интересует конфиденциальность переписки его абонентов они нехотя спросили мой номер и номера с которых приходят копии.
Спустя только года 2 от человека который в теме я узнал что был сбой и многие сообщения уходили на левые номера.