среда, 7 января 2009 г.

Почему я не могу добавлять гиперссылки в балун-подсказки области уведомлений?

Это перевод Why can't I put hotlinks in notification icon balloon tips? Автор: Реймонд Чен.
Короткий ответ: "Потому что там нет флага NIF_PARSELINKS".

Длинный ответ:

Когда такие всплывающие подсказки впервые были разработаны, у них не было возможности вставлять в текст ссылки. Соответственно, программы могли свободно показывать там небезопасный текст, поскольку этот текст не мог стать "живым". Так, к примеру, антивирус мог показывать сообщения "Документ 'XYZ' был проверен и вирусов в нём не найдено".

Теперь предположим, что в балунах разрешили гиперссылки. Посмотрите, как эта возможность могла быть использована: я могу написать web-страничку, которая содержит
<TITLE>&lt;A HREF="file:C:\Windows\system32\format.com?C:"&gt;
План вечеринки&lt;/A&gt;</TITLE>
Потом я называю файл "План вечеринки.html", прикрепляю его к e-mail, и отправляю его вам.
Вы скачиваете сообщение и, поскольку вы очень осторожный человек, вы скармливаете его своему антивирусу для проверки. Появляется балун:
Сканирование завершено×
Документ 'План вечеринки' был проверен
и вирусов в нём не найдено.
"О, как удобно" - говорите вы себе, - "антивирус даже включил ссылку на документ, чтобы мне было проще его открыть".

И тогда вы щёлкаете по ссылке и ваш жёсткий диск переформатируется.

"Тогда почему бы вам не добавить флаг NIF_PARSELINKS, так что люди могли бы включать ссылки только в некоторых своих подсказках, а те, кто писал на старом API, остались бы не задетыми?".

(Я слышал, как один человек пытался передать флаг TTF_PARSELINKS в поле NOTIFYICONDATA.uFlags и удивлялся, почему это не работает. Я надеюсь, что это очевидно).

Потому что это просто перекладывание ответственности на другого. Любой использующий этот флаг был бы обязан быть очень осторожным, чтобы не допустить непроверенных данных в своих балунах. Большинство людей скажут: "Вау! Новый флаг! Это круто!" и начнут использовать его где попало, вообще без рассмотрения требований к безопасности. Тогда любой сможет убедить какую-нибудь программу показать "вредный" текст в своём балуне и, таким образом, использовать брешь в безопасности.

"Ааа, да перестань, кто ж будет таким глупым, чтобы писать код, без учёта требований безопасности?".
Я надеюсь, это был вопрос-шутка.

Лучшим способом убедиться в безопасности вещей - сделать их такими, чтобы небезопасное их использование стало невозможным.

1 комментарий:

  1. чем больше тебя читаю, тем меньше поводов ругать MS =)

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.