<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Записки веб-программиста</title>
	<link>http://web-notes.ru</link>
	<description>Программирование для Web и LifeHack</description>
	<pubDate>Mon, 01 Aug 2011 15:08:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.2</generator>
	<language>en</language>
			<item>
		<title>Осторожно! Обновление Windows! (KB2509553)</title>
		<link>http://web-notes.ru/2011/04/warning-windows-update-kb2509553/</link>
		<comments>http://web-notes.ru/2011/04/warning-windows-update-kb2509553/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 20:27:04 +0000</pubDate>
		<dc:creator>gugglegum</dc:creator>
		
		<category><![CDATA[Windows]]></category>

		<category><![CDATA[Безопасность]]></category>

		<guid isPermaLink="false">http://web-notes.ru/2011/04/%d0%be%d1%81%d1%82%d0%be%d1%80%d0%be%d0%b6%d0%bd%d0%be-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-windows-kb2509553/</guid>
		<description><![CDATA[На днях я столкнулся с проблемой: ни с того, ни с сего, интернет стал жутко тормозить. Любая страница сайта открывается около минуты, либо не открывается вовсе. Я сначала думал, что проблема в роутере (ох, уж этот D-Link знаете ли), но на этот раз дело было не в нём. У меня дома 2 провайдера (один резервный), [...]]]></description>
			<content:encoded><![CDATA[<p>На днях я столкнулся с проблемой: ни с того, ни с сего, интернет стал жутко тормозить. Любая страница сайта открывается около минуты, либо не открывается вовсе. Я сначала думал, что проблема в роутере (ох, уж этот D-Link знаете ли), но на этот раз дело было не в нём. У меня дома 2 провайдера (один резервный), но подобная проблема наблюдалась на обоих. Причем, вот что характерно: пинги шли хорошо, и торрент прекрасно работал, даже удаленный доступ (RDP) не тормозил, но сайты &#8212; беда. В любом браузере. Причем, у меня есть второй компьютер &#8212; на нем всё окей.</p>
<p>Было очевидно, что проблема не у провайдера и не в роутере, а где-то на компьютере. Я стал искать проблему в нем. Сначала вроде бы помогала перезагрузка или выключение-включение &#8220;подключения по локальной сети&#8221;, но лишь на какое-то время. Я решил было, что моя старая 3Com-овская сетевуха наелась. У меня на компьютере есть вторая сетевая карта (да, у меня всего по два) &#8212; встроенная. Я переключился на неё. Поначалу казалось, проблема решилась, но потом всё повторилось по-новой уже на другой сетевой карте.  <a href="http://web-notes.ru/2011/04/warning-windows-update-kb2509553/#more-72" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://web-notes.ru/2011/04/warning-windows-update-kb2509553/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Как отключить автоматическое воспроизведение видео на YouTube</title>
		<link>http://web-notes.ru/2010/09/%d0%ba%d0%b0%d0%ba-%d0%be%d1%82%d0%ba%d0%bb%d1%8e%d1%87%d0%b8%d1%82%d1%8c-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%b2%d0%be%d1%81%d0%bf%d1%80%d0%be/</link>
		<comments>http://web-notes.ru/2010/09/%d0%ba%d0%b0%d0%ba-%d0%be%d1%82%d0%ba%d0%bb%d1%8e%d1%87%d0%b8%d1%82%d1%8c-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%b2%d0%be%d1%81%d0%bf%d1%80%d0%be/#comments</comments>
		<pubDate>Sun, 19 Sep 2010 20:48:26 +0000</pubDate>
		<dc:creator>gugglegum</dc:creator>
		
		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[Lifehack]]></category>

		<guid isPermaLink="false">http://web-notes.ru/2010/09/%d0%ba%d0%b0%d0%ba-%d0%be%d1%82%d0%ba%d0%bb%d1%8e%d1%87%d0%b8%d1%82%d1%8c-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%b2%d0%be%d1%81%d0%bf%d1%80%d0%be/</guid>
		<description><![CDATA[Вас тоже бесит когда видео с ютуба начинает проигрываться сразу после загрузки страницы, зачастую когда Вы этого совсем не ждете?
Когда автовоспроизведение видео (autoplay) мешает? Например, работали Вы в интернете, что-то читали, смотрели видео-ролики, открывали в новых вкладках всякое &#8220;related video&#8221;. В результате у Вас открыто несколько окон с парой десятков вкладок, на некоторых из которых [...]]]></description>
			<content:encoded><![CDATA[<p>Вас тоже бесит когда видео с ютуба начинает проигрываться сразу после загрузки страницы, зачастую когда Вы этого совсем не ждете?</p>
<p>Когда автовоспроизведение видео (autoplay) мешает? Например, работали Вы в интернете, что-то читали, смотрели видео-ролики, открывали в новых вкладках всякое &#8220;related video&#8221;. В результате у Вас открыто несколько окон с парой десятков вкладок, на некоторых из которых открыты ролики ютуба. Вы, конечно, могли бы сразу закрыть страницы с этими роликами после просмотра, но это Ваше право их не закрывать. Может быть Вы хотите потом посмотреть их еще раз или отправить ссылку другу, поэтому держите вкладку с роликом открытой. Потом вам нужно было уйти, вы выключили компьютер, а когда пришли спустя время &#8212; Вы запускаете свой любимый Firefox, чтобы почитать новости или форум, он открывается и восстанавливает все ранее открытые табы со страницами, которые были на момент когда вы заканчивали работу. И вдруг, совершенно неожиданно для Вас, восстановленные вкладки с роликами YouTube начинают воспроизводиться одновременно, создавая ужасную какофонию, тормозя компьютер и до кучи будя спящего ребенка в Вашем доме. Вы судорожно начинаете искать какие вкладки издают звук и закрывать одну вкладку за другой, параллельно пытаясь отключить или уменьшить громкость&#8230; Неприятно, правда? Есть решение! <a href="http://web-notes.ru/2010/09/%d0%ba%d0%b0%d0%ba-%d0%be%d1%82%d0%ba%d0%bb%d1%8e%d1%87%d0%b8%d1%82%d1%8c-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%b2%d0%be%d1%81%d0%bf%d1%80%d0%be/#more-71" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://web-notes.ru/2010/09/%d0%ba%d0%b0%d0%ba-%d0%be%d1%82%d0%ba%d0%bb%d1%8e%d1%87%d0%b8%d1%82%d1%8c-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%b2%d0%be%d1%81%d0%bf%d1%80%d0%be/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Восстановить поиск Google в адресной строке в русском Firefox</title>
		<link>http://web-notes.ru/2010/09/%d0%b2%d0%be%d1%81%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-google-%d0%b2-%d0%b0%d0%b4%d1%80%d0%b5%d1%81%d0%bd%d0%be%d0%b9-%d1%81%d1%82%d1%80%d0%be%d0%ba/</link>
		<comments>http://web-notes.ru/2010/09/%d0%b2%d0%be%d1%81%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-google-%d0%b2-%d0%b0%d0%b4%d1%80%d0%b5%d1%81%d0%bd%d0%be%d0%b9-%d1%81%d1%82%d1%80%d0%be%d0%ba/#comments</comments>
		<pubDate>Sun, 19 Sep 2010 19:51:43 +0000</pubDate>
		<dc:creator>gugglegum</dc:creator>
		
		<category><![CDATA[Google]]></category>

		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://web-notes.ru/2010/09/%d0%b2%d0%be%d1%81%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-google-%d0%b2-%d0%b0%d0%b4%d1%80%d0%b5%d1%81%d0%bd%d0%be%d0%b9-%d1%81%d1%82%d1%80%d0%be%d0%ba/</guid>
		<description><![CDATA[С некоторых пор локализованные русскоязычные версии дистрибутива Firefox стали использовать в качестве поисковика в адресной строке Яндкес. Лично мне больше симпатичен Google, поэтому исправляем так:
1. Заходим на страницу about:config.
2. Ищем параметр keyword.URL.
3. Меняем его значение на:
http://www.google.com/search?ie=UTF-8&#038;oe=UTF-8&#038;sourceid=navclient&#038;gfns=1&#038;q=
Взято отсюда. Разместил в своем блоге просто, чтоб всегда было под рукой.
]]></description>
			<content:encoded><![CDATA[<p>С некоторых пор локализованные русскоязычные версии дистрибутива Firefox стали использовать в качестве поисковика в адресной строке Яндкес. Лично мне больше симпатичен Google, поэтому исправляем так:</p>
<p>1. Заходим на страницу <strong>about:config</strong>.</p>
<p>2. Ищем параметр <strong>keyword.URL</strong>.</p>
<p>3. Меняем его значение на:</p>
<p><code>http://www.google.com/search?ie=UTF-8&#038;oe=UTF-8&#038;sourceid=navclient&#038;gfns=1&#038;q=</code></p>
<p>Взято <a href="http://habrahabr.ru/blogs/firefox/64698/">отсюда</a>. Разместил в своем блоге просто, чтоб всегда было под рукой.</p>
]]></content:encoded>
			<wfw:commentRss>http://web-notes.ru/2010/09/%d0%b2%d0%be%d1%81%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-google-%d0%b2-%d0%b0%d0%b4%d1%80%d0%b5%d1%81%d0%bd%d0%be%d0%b9-%d1%81%d1%82%d1%80%d0%be%d0%ba/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Конференция по Zend Framework</title>
		<link>http://web-notes.ru/2010/02/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-%d0%bf%d0%be-zend-framework/</link>
		<comments>http://web-notes.ru/2010/02/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-%d0%bf%d0%be-zend-framework/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 09:37:26 +0000</pubDate>
		<dc:creator>gugglegum</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://web-notes.ru/2010/02/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-%d0%bf%d0%be-zend-framework/</guid>
		<description><![CDATA[В конце марта 2010 в Санкт-Петербурге будет проведена конференция по Zend Framework. Насколько мне известно, это первая конференция в России. По крайней мере такого масштаба. Недавно у конференции появился свой сайт http://www.zfconf.ru/, там выложен список докладов и открыта предварительная регистрация.
]]></description>
			<content:encoded><![CDATA[<p>В конце марта 2010 в Санкт-Петербурге будет проведена конференция по Zend Framework. Насколько мне известно, это первая конференция в России. По крайней мере такого масштаба. Недавно у конференции появился свой сайт <a href="http://www.zfconf.ru/">http://www.zfconf.ru/</a>, там выложен список докладов и открыта предварительная регистрация.</p>
]]></content:encoded>
			<wfw:commentRss>http://web-notes.ru/2010/02/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-%d0%bf%d0%be-zend-framework/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Вернуть старую навигацию в PHPMyAdmin 3</title>
		<link>http://web-notes.ru/2009/07/old-style-phpmyadmin-table-browsing/</link>
		<comments>http://web-notes.ru/2009/07/old-style-phpmyadmin-table-browsing/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 11:13:29 +0000</pubDate>
		<dc:creator>gugglegum</dc:creator>
		
		<category><![CDATA[Юзабилити]]></category>

		<guid isPermaLink="false">http://web-notes.ru/2009/07/old-style-phpmyadmin-table-browsing/</guid>
		<description><![CDATA[Всем, кому не по душе новая навигация в PHPMyAdmin (PMA) версии 3.0 и выше, кто привык к тому, что в левой колонке при клике на имя таблицы показывается ее структура, а клик по иконке слева от имени таблицы &#8212; ее содержимое (а не наоборот, как сейчас), то Вам будут полезны следующие параметры конфигурации, которые надо [...]]]></description>
			<content:encoded><![CDATA[<p>Всем, кому не по душе новая навигация в PHPMyAdmin (PMA) версии 3.0 и выше, кто привык к тому, что в левой колонке при клике на имя таблицы показывается ее структура, а клик по иконке слева от имени таблицы &#8212; ее содержимое (а не наоборот, как сейчас), то Вам будут полезны следующие параметры конфигурации, которые надо добавить в config.inc.php:</p>
<p><code>$cfg['LeftDefaultTabTable'] = 'sql.php';<br />
$cfg['DefaultTabTable'] = 'tbl_structure.php';</code></p>
<p>Найти эти параметры в конфигурации по ключевым словам, и даже при визуальном просмотре всех существующих параметров довольно трудно. В FAQ тоже нет, хотя это изменение &#8212; первое что бросается в глаза и некоторых начинает раздражать после перехода с PMA 2.x на 3.x.</p>
]]></content:encoded>
			<wfw:commentRss>http://web-notes.ru/2009/07/old-style-phpmyadmin-table-browsing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Кириллический домен .РФ</title>
		<link>http://web-notes.ru/2008/11/cyrillic_domain_rf/</link>
		<comments>http://web-notes.ru/2008/11/cyrillic_domain_rf/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 12:29:37 +0000</pubDate>
		<dc:creator>gugglegum</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://web-notes.ru/2008/11/cyrillic_domain_rf/</guid>
		<description><![CDATA[Вчера, 5 ноября, ICANN таки принял решение о создании зоны .рф (домена верхнего уровня). Что я могу сказать? Человеческая глупость не имеет предела.
В свое время RU-Center устроил голосование на своем сайте и разослал ссылку на него всем своим клиентам, т.е. всем, кто регистрировал какие-либо домены в зоне .ru и не только. Текст письма был составлен [...]]]></description>
			<content:encoded><![CDATA[<p>Вчера, 5 ноября, <a href="http://www.lenta.ru/news/2008/11/05/icann/">ICANN таки принял решение о создании зоны .рф</a> (домена верхнего уровня). Что я могу сказать? Человеческая глупость не имеет предела.</p>
<p>В свое время <a href="http://nic.ru/">RU-Center</a> устроил голосование на своем сайте и <a href="http://www.e1.ru/talk/forum/read.php?f=37&#038;i=130385&#038;t=130385">разослал ссылку на него</a> всем своим клиентам, т.е. всем, кто регистрировал какие-либо домены в зоне .ru и не только. Текст письма был составлен таким образом, чтобы вызывать патриотические чувства у людей, легко ведущихся на развод. Там говорилось про то, что Россия может быть первой страной, в которой будет введены кириллические домены (но не говорилось про то, что она же может стать и последней). Плюс они устроили акцию &#8220;Поддержи Россию, проголосуй за .РФ!&#8221;. Быдло всегда ведется на простые и понятные лозунги, не пытаясь разобраться в чем именно при этом будет заключаться поддержка России и кому это выгодно на самом деле.</p>
<p>Естественно, пиар-акция прошла не даром, домен .рф победил в голосовании и сейчас уже известно, что с июня 2009 можно будет начать регистрировать домены в этой зоне.</p>
<p>Как будут развиваться события? Первым делом киберсквоттеры начнут скупать звучные домены из русского словаря типа пиво.рф, водка.рф, секс.рф и т.п. Через пару недель после этого &#8220;проснутся&#8221; обычные компании, которые уже имеют свои сайты и чтобы не стать жертвой киберсквоттеров начнут регистрировать свои торговые марки (как зарегистрированные, так и незарегистрированные) в русской раскладке типа &#8220;евросеть.рф&#8221;, &#8220;билайн.рф&#8221; и т.п. На этих доменах они будут делать либо зеркало (альяс) основного сайта, либо редирект на англоязычный домен в зоне .RU. Количество сайтов, существующих исключительно в зоне .РФ я оцениваю не более 5%.</p>
<p>В результате, RU-Center и киберсквоттеры сумеют неслабо так обогатиться за счет простых компаний, имеющих свои сайты. Меня если честно тоже подмывает соблазн кинуться скупать звучные домены, пока это не сделал кто-нибудь другой, но я не хочу вкладывать деньги и таким образом популяризовывать изначально бредовую идею.</p>
<p>Кстати, в браузере адреса в кириллице будут выглядеть весьма неприглядно. Введенный адрес, скажем, &#8220;кремль.рф&#8221; будет трансформироваться в нечто страшное: &#8220;http://www.xn--e1ajeds9e.xn--p1ai/&#8221;. Теоретически возможно написание какого-нибудь плагина или расширения для каждого браузера, которое будет подменять написание, и тогда в адресной строке можно будет видеть реальную кириллицу, но пока ничего такого нет. Opera, правда, не трансформирует русские домены &#8212; то ли она их попросту не поддерживает, то ли трансформирует незримо для пользователя.</p>
<p>Возможно, через пару лет истерия по поводу нового домена уляжется и его популярность пойдет на спад. Домен .рф может стать чем-то вроде существующего сейчас домена .su, который вроде как есть, но им никто особо не пользуется. Я все же призываю людей не вкладывать деньги в это безумие, не создавать ажиотаж, нам сейчас хватает кризисов.</p>
]]></content:encoded>
			<wfw:commentRss>http://web-notes.ru/2008/11/cyrillic_domain_rf/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Защита сайта от cross-site request forgery (CSRF)</title>
		<link>http://web-notes.ru/2008/09/csrf/</link>
		<comments>http://web-notes.ru/2008/09/csrf/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 18:54:00 +0000</pubDate>
		<dc:creator>gugglegum</dc:creator>
		
		<category><![CDATA[Безопасность]]></category>

		<guid isPermaLink="false">http://web-notes.ru/2008/09/%d0%b7%d0%b0%d1%89%d0%b8%d1%82%d0%b0-%d1%81%d0%b0%d0%b9%d1%82%d0%b0-%d0%be%d1%82-cross-site-request-forgery-csrf/</guid>
		<description><![CDATA[Cross-site request forgery &#8212; это разновидность атаки на пользователя, при которой посещаемый веб-сайт выполняет несанкционированные действия, используя действующую авторизацию.
Предположим Вы зашли на сайт A, авторизовались там как пользователь (используя куки) и не завершая сессии зашли на сайт B, который использует CSRF-уязвимость сайта A и выполняет от Вашего имени какие-либо действия, например, постит сообщение, содержащее спам, [...]]]></description>
			<content:encoded><![CDATA[<p>Cross-site request forgery &#8212; это разновидность атаки на пользователя, при которой посещаемый веб-сайт выполняет несанкционированные действия, используя действующую авторизацию.</p>
<p>Предположим Вы зашли на сайт A, авторизовались там как пользователь (используя куки) и не завершая сессии зашли на сайт B, который использует CSRF-уязвимость сайта A и выполняет от Вашего имени какие-либо действия, например, постит сообщение, содержащее спам, поднимает репутацию какому-нибудь пользователю или что-нибудь еще в таком духе. А может быть еще и вот такой <a href="http://bryk.ru/2008/04/22/csrf_bag_na_sajjte_vkontakte.ru.html">забавный сценарий</a>, который некогда воплотился на сайте вконтакте.ру.</p>
<p>Прежде чем продолжить, хочу сразу сделать оговорку. CSRF &#8212; это в общем понимании не совсем уязвимость. Уязвимость &#8212; это когда при каких-то определенных условиях программа ведет себя не так, как задумывал ее разработчик. Но CSRF &#8212; это нормальное поведение всех сайтов в Интернете! Это можно сказать фича Интернета, которая иногда может быть использована во вред.</p>
<p>Суть в том, что форма и обработчик формы не обязаны находиться на одном и том же сайте. Обработчик формы обработает пришедший к нему запрос с данными вне зависимости от того, с какого адреса они пришли.</p>
<p>Иногда это бывает удобно. Например, мне как-то раз надоело вручную заполнять одни и те же заявки на неисправность у провайдера КабiNET и я на локалхосте создал форму один в один повторяющую поля и указал в качестве обработчика (action) обработчик на сайте провайдера. В результате, у меня была своя форма заявки, в которой уже были заведены основные шаблоны описаний неисправностей, нужно было лишь выбрать шаблон и нажать Отправить.</p>
<p>Это был пример мирного применения CSRF, но существуют естественно и враждебные, защиту от которых должен предусмотреть разработчик сайта. Ситуация осложняется тем, что враждебный сайт может использовать Javascript, чтобы произвести отправку формы (без всяких кликов, неважно GET или POST) в невидимом IFrame&#8217;е так, что пользователь даже не будет знать о том, что от его имени где-то что-то выполнилось. Страшно? <img src='http://web-notes.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Как же защититься от враждебного применения CSRF?</strong></p>
<p>В примитиве обработчик формы может просто проверять HTTP-заголовок Referer, где указывается с какого адреса пришел запрос и если адрес левый, то не обрабатывать запрос. Но этот заголовок не является обязательным и некоторые файрволлы (я точно знаю, что Agnitum Outpost Firewall) подменяют значение этого заголовка на название или адрес сайта файрволла. Поэтому полагаться на Referer все же не стоит.</p>
<p>Более грамотным решением является встраивание в форму дополнительного скрытого поля, содержащее какое-то значение, зависящее от текущей сессии пользователя. Самое простое и первое что приходит в голову &#8212; естественно идентификатор сессии. Враждебный сайт не сможет прочитать куку другого сайта (см. <a href="http://en.wikipedia.org/wiki/Same_origin_policy">same origin policy</a>) и соответственно не сможет подставить в скрытое поле правильное значение.</p>
<p>Используйте описанный прием всегда там, где теоретически возможно враждебное применение CSRF.</p>
<p>См. также описание <a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery">CSRF на википедии</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://web-notes.ru/2008/09/csrf/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Несколько функций __autoload в одном коде на PHP</title>
		<link>http://web-notes.ru/2008/09/multiple_autoload/</link>
		<comments>http://web-notes.ru/2008/09/multiple_autoload/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 23:35:53 +0000</pubDate>
		<dc:creator>gugglegum</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://web-notes.ru/2008/09/multiple_autoload/</guid>
		<description><![CDATA[С полгода назад я писал про нюансы автоматической загрузки классов с использованием __autoload(), и там указывал на проблему использования данного способа, заключающуюся в том, что функция с магическим именем &#8220;__autoload&#8221; может быть объявлена только одна. Поэтому, если Вы пишете свой фреймворк и использовали в нем функцию с этим именем, то другой фреймворк, использующий аналогичную функцию [...]]]></description>
			<content:encoded><![CDATA[<p>С полгода назад я писал про <a href="http://web-notes.ru/2008/03/php_class_autoload/">нюансы автоматической загрузки классов с использованием __autoload()</a>, и там указывал на проблему использования данного способа, заключающуюся в том, что функция с магическим именем &#8220;__autoload&#8221; может быть объявлена только одна. Поэтому, если Вы пишете свой фреймворк и использовали в нем функцию с этим именем, то другой фреймворк, использующий аналогичную функцию уже не сможет работать в паре с Вашим.</p>
<p>Я писал про то, что единственным решением проблемы автозагрузки классов из двух несвязанных фреймворков может быть лишь создание гибрида из двух __autoload-функций. При этом я сам, выносил функцию автозагрузки за пределы фреймворка, отдавая загрузку классов на откуп программиста, непосредственно использующего мой фреймворк.</p>
<p>Так было полгода назад. В последствии я ближе познакомился со <a href="http://www.php.net/~helly/php/ext/spl/">Standard PHP Library</a> (SPL) и осознал, что эта проблема давно решена при помощи функции spl_autoload_register, которая активизирует стэк из функций автозагрузки классов.</p>
<p>Разумеется, Вы должны использовать уникальное имя для своей функции автозагрузки, поэтому от имени &#8220;__autoload&#8221; лучше отказаться сразу. Можете использовать уникальный префикс типа &#8220;myframework_autoload&#8221; или завернуть эту функцию в отдельный класс автозагрузки. А еще лучше (в рассчете на будущее) <a href="http://web-notes.ru/2008/09/whatsnew_in_php_53/">использовать нэймспэйсы в PHP</a>, хотя это сразу ограничит минимальную версию PHP до 5.3.0.</p>
<p>Когда Вы первый раз вызываете функцию spl_autoload_register(), она активизирует стэк функций автозагрузки классов и с этого момента функция с именем &#8220;__autoload&#8221; уже не вызывается автоматически, если только Вы не зарегистрируете и ее. Т.е. с момента вызова spl_autoload_register функция с именем &#8220;__autoload&#8221; перестает быть магической. И даже разрегистрирование всех функций автозагрузки при помощи spl_autoload_unregister не возвращает ее магическое предназначение.</p>
<p>Зарегистрированные функции вызываются в том же порядке, в каком они были зарегистрированы. Цепочка вызовов прекращается сразу как только очередная функция автозагрузки нашла и загрузила нужный класс. Исходя из этого, логичнее регистрировать функции автозагрузки в порядке частоты их предполагаемого использования (частые в начало). <a href="http://web-notes.ru/2008/09/multiple_autoload/#more-63" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://web-notes.ru/2008/09/multiple_autoload/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Что нового нас ждет в PHP 5.3?</title>
		<link>http://web-notes.ru/2008/09/whatsnew_in_php_53/</link>
		<comments>http://web-notes.ru/2008/09/whatsnew_in_php_53/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 07:26:42 +0000</pubDate>
		<dc:creator>gugglegum</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://web-notes.ru/2008/09/%d1%87%d1%82%d0%be-%d0%bd%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d0%bd%d0%b0%d1%81-%d0%b6%d0%b4%d0%b5%d1%82-%d0%b2-php-53/</guid>
		<description><![CDATA[Случайно наткнулся на сайте php.net на анонс альфа версии PHP 5.3, глянул список изменений и был настолько воодушевлен, что решил написать об этом здесь. Данное обновление принесет нам, пожалуй, самые ожидаемые нововведения в синтаксисе языка.
Ура! В PHP наконец-то появятся нэймспэйсы! Что это такое? Это разделяемые пространства имен, в которых Вы определяете классы и функции, чтобы [...]]]></description>
			<content:encoded><![CDATA[<p>Случайно наткнулся на сайте <a href="http://php.net">php.net</a> на анонс альфа версии PHP 5.3, глянул список изменений и был настолько воодушевлен, что решил написать об этом здесь. Данное обновление принесет нам, пожалуй, самые ожидаемые нововведения в синтаксисе языка.</p>
<p>Ура! В PHP наконец-то появятся нэймспэйсы! Что это такое? Это разделяемые пространства имен, в которых Вы определяете классы и функции, чтобы они не пересекались там, где не надо. Случалось ли Вам объявлять какой-то класс, например, DB или Log, а потом при подключении какой-нибудь библиотеки или репозитария классов обнаружить, что там уже есть класс с точно таким же именем и это создает Вам проблемы. Особенно при использовании функции автозагрузки классов (см. <a href="http://web-notes.ru/2008/03/php_class_autoload/">__autoload</a>).</p>
<p>И что в этой ситуации делают почти все разработчики библиотек? Правильно, приписывают префиксы к именам своих классов типа &#8220;MyFramework_ClassName&#8221;. При этом сами имена классов бывают довольно длинные, а в купе с префиксом и вовсе разростаются иной раз до 40 и более символов. Конечно, это неудобно каждый раз везде писать такие длинные имена, особенно внутри самого фреймворка.</p>
<p>Решение в нэймспэйсах &#8212; Вы просто объявляете в начале каждого файла с классом нэймспэйс и все Ваши классы в рамках этого нэймспэйса, будут друг с другом &#8220;на короткой ноге&#8221;. А чтобы обратиться из другого нэймспэйса нужно либо указать полное имя класса вместе с нэймспэйсом, либо импортировать нэймспэйс при помощи ключевого слова &#8220;use&#8221;.</p>
<p>Что еще примечательно, нэймспэйсы могут быть вложенными, т.е. образовывать иерархическую структуру, обращаться к которой можно через путь. Вам это ничего не напоминает? Да, именно так реализованы пакеты классов в Java. Только там это называются package, а здесь namespace.</p>
<p>Я не буду переводить всю документацию, моей целью было рассказать лишь общую суть. Подробнее <a href="http://ru.php.net/language.namespaces">читайте сами</a>.</p>
<p>Еще советую познакомиться с другим интересным нововведением в синтаксисе &#8212; &#8220;<a href="http://ru2.php.net/oop5.late-static-bindings">Late static binding</a>&#8220;. Дело в том, что при статических вызовах self:: не является своего рода статичным аналогом $this, т.к. self:: ссылается на класс, в котором он используется, а не на тот, к которому идет обращение. Пример в документации очень наглядно демонстрирует проблему и решение, при помощи нового синтаксиса &#8220;static::&#8221;. Как минимум это должно упростить использование паттерна Singleton когда класс, реализующий данный паттерн, необходимо расширить (наследовать).</p>
]]></content:encoded>
			<wfw:commentRss>http://web-notes.ru/2008/09/whatsnew_in_php_53/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Chrome. Первые впечатления</title>
		<link>http://web-notes.ru/2008/09/google_chrome/</link>
		<comments>http://web-notes.ru/2008/09/google_chrome/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 06:50:43 +0000</pubDate>
		<dc:creator>gugglegum</dc:creator>
		
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://web-notes.ru/2008/09/google_chrome/</guid>
		<description><![CDATA[Вчера мой друг Макс прислал мне ссылку на подборку новостей о том, что Google опубликовал анонс выпуска собственного браузера &#8220;Chrome&#8221;, основанного на исходниках Apple WebKit (Safari). По правде сказать, для меня это было неожиданностью. Уже 4 года ходят слухи о том, что гугл вроде как собирается выпустить свой браузер, но воспринимались они как что-то очень [...]]]></description>
			<content:encoded><![CDATA[<p>Вчера <a href="http://maxd.livejournal.com">мой друг Макс</a> прислал мне ссылку на <a href="http://news.google.ru/news?q=google+chrome">подборку новостей</a> о том, что Google опубликовал анонс выпуска собственного браузера &#8220;Chrome&#8221;, основанного на исходниках Apple WebKit (Safari). По правде сказать, для меня это было неожиданностью. Уже 4 года ходят слухи о том, что гугл вроде как собирается выпустить свой браузер, но воспринимались они как что-то очень недостоверное и далекое во времени. К тому же были и официальные заявления с опровержениями этих слухов &#8212; мол существующие браузеры их и так устраивают. А тут бац! Нате новый браузер.</p>
<p>Вчера же поздно вечером в 11 утра по дневному тихоокеанскому времени (в 22 часа по Москве) была прямая видео-трансляция презентации нового браузера в Google, где разработчики рассказывали о том, как они делали свой браузер и в чем его преимущества перед существующими. Я не буду перечислять все преимущества нового браузера, <a href="http://www.techradar.com/news/internet/web/20-things-you-need-to-know-about-google-chrome-462234">они уже перечислены</a> до меня.</p>
<p>Просто я установил Chrome-beta себе на компьютер и могу поделиться первыми впечатлениями. Итак, первое впечателние: просто супер! Эргономика интерфейса на высшем уровне. Сделано так, чтобы было удобно пользоваться. Правда, удобство может обернуться обратной стороной, когда возникнет потребность расширять функционал посредством сторонних расширений. Надеюсь, разработчики предусмотрели и это. А пока что без расширений Chrome для меня просто забавная игрушка типа Opera. Странно, конечно, что разработчики взяли за основу движок Apple WebKit, а не Mozilla Gecko, но главное чтоб он хорошо работал и соблюдал стандарты по части рендеринга страниц.</p>
<p>Пожалуй, главным новшеством в Chrome является мульти-процессная архитектура (multi-process design). Это означает, что все вкладки и окна браузера живут не в одном процессе и делят процессорное время посредством искусственных механизмов в самом браузере, а в отдельных процессах и их разделением занимается операционная система. Теоретически это также должно позволить обрабатывать разные табы разными ядрами процессора на компьютерах с мультиядровыми процессорами. В Chrome есть один главный процесс самого браузера и по одному процессу на каждый непустой таб. <a href="http://web-notes.ru/2008/09/google_chrome/#more-60" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://web-notes.ru/2008/09/google_chrome/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

