<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Сервер онлайн-тестирования. Образовательный портал WebTeach.ru &#187; Безопасность</title>
	<atom:link href="http://webteach.ru/category/web-programmirovanie/bezopasnost/feed" rel="self" type="application/rss+xml" />
	<link>http://webteach.ru</link>
	<description>Уроки и статьи по информатике, биологии, литературе, астрономии, химии... Сервис онлайн-тестирования.</description>
	<lastBuildDate>Mon, 06 Feb 2012 09:43:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Cookies и безопасность</title>
		<link>http://webteach.ru/web-programmirovanie/bezopasnost/cookies-i-bezopasnost</link>
		<comments>http://webteach.ru/web-programmirovanie/bezopasnost/cookies-i-bezopasnost#comments</comments>
		<pubDate>Sun, 24 Jan 2010 15:08:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Безопасность]]></category>

		<guid isPermaLink="false">http://webteach.ru/?p=484</guid>
		<description><![CDATA[Безопасность файлов cookie вызывает сомнения у многий интернет пользователей. Стоит задуматься, а не может ли кто-то без вашего ведома узнать номер кредитной карточки, которая использовалась при последней покупки в Мнтернет-магазине, или узнать пароль почтового ящика и ознакомиться с вашими письмами. Отмечая удобства, которые предоставляют cookies во время путешествий по web-страницам (отпадает необходимость в многократных повторах [...]]]></description>
			<content:encoded><![CDATA[<p>Безопасность файлов cookie вызывает сомнения у многий интернет пользователей. Стоит задуматься, а не может ли кто-то без вашего ведома узнать номер кредитной карточки, которая использовалась при последней покупки в Мнтернет-магазине, или узнать пароль почтового ящика и ознакомиться с вашими письмами. Отмечая удобства, которые предоставляют cookies во время путешествий по web-страницам (отпадает необходимость в многократных повторах ввода кодов, паролей и других идентификационных атрибутов), мы стремимся одновременно к тому, чтобы чужие не могли познакомиться с нашей личной информацией. Проблема с cookie состоит в том. Что они записываются без нашего ведома. А неизвестное всегда порождает более или менее обоснованные опасения. </p>
<p>Хотя механизм cookies функционирует без нашего ведома, это вовсе не означает, что мы не можем его контролировать. Опасаясь, что какая-то информация личного характера может уйти из компьютера, можно просто отключить запись файлов cookie.</p>
<p>Вообще считать, что cookies угрожают утечкой информации, &#8211; большое преувеличение. Сама возможность кражи информации из файлов cookie значительно ограничена механизмом идентификации сервера с помощью параметра domain. Если даже кому-то удастся прочитать cookies, хранящиеся на диске компьютера, то эти данные невозможно использовать до тех пор, пока не удастся их связать с конкретной личностью в реальном мире, а это удается исключительно редко.</p>
<p>Общее правило гласит: пока мы путешествуем по хорошо известным и вызывающим доверие страницам, которые информируют нас о том, какие сведения собраны там и с какой целью, нам ничего не грозит. Если же возникают какие-то сомнения относительно намерений автора страницы, а мы ценим право самим распоряжаться собственной информацией. Лучше всего отказаться от доступа к подозрительной странице. Ведь даже не каждому знакомому сообщается личный домашний адрес и номер телефона, а что уж говорить об анонимном сервере.</p>
]]></content:encoded>
			<wfw:commentRss>http://webteach.ru/web-programmirovanie/bezopasnost/cookies-i-bezopasnost/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Общие советы по защите сайта от взлома</title>
		<link>http://webteach.ru/web-programmirovanie/bezopasnost/obshhie-sovety-po-zashhite-sajta-ot-vzloma</link>
		<comments>http://webteach.ru/web-programmirovanie/bezopasnost/obshhie-sovety-po-zashhite-sajta-ot-vzloma#comments</comments>
		<pubDate>Thu, 14 Aug 2008 15:54:07 +0000</pubDate>
		<dc:creator>kr4shr</dc:creator>
				<category><![CDATA[Безопасность]]></category>

		<guid isPermaLink="false">http://webteach.ru/2008/08/14/obshhie-sovety-po-zashhite-sajta-ot-vzloma/</guid>
		<description><![CDATA[Иногда для защиты скрипта от взлома сайта нужно обращать внимание не на конкретные уязвимости (но их, конечно, нужно устранять), а на защиту сайта в целом (по сути предотвращать уязвимости до их нахождение). В данной статье я расскажу Вам, что нужно периодически проделывать над своим сайтом, чтобы защитить его от взлома. Если Вы пользуетесь каким–либо скриптом, [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда для защиты скрипта от взлома сайта нужно обращать внимание не на конкретные уязвимости (но их, конечно, нужно устранять), а на защиту сайта в целом (по сути предотвращать уязвимости до их нахождение). В данной статье я расскажу Вам, что нужно периодически проделывать над своим сайтом, чтобы защитить его от взлома.</p>
<p>Если Вы пользуетесь каким–либо скриптом, доступным для свободного скачивания, то следите за bugtracker&#8217;ом и периодически обновляйтесь. В новых версиях часто исправляют серьёзные уязвимости, найденные в предыдущих версиях.</p>
<p>Также если на Вашем сайте указано, каким скриптом Вы пользуетесь, то удалите из этой информации номер версии. Если хакер не знает, какая у Вас версия, он может не задействовать уязвимость в той версии скрипта, которая стоит у Вас. Но, повторюсь, лишь &#8220;может&#8221;, так что всё равно обновляйтесь.</p>
<p>Теперь пройдёмся по ошибкам, которые могут быть в Вашем самопальном скрипте.</p>
<p>1. Пароль хранится в файле, который может быть скачен хакером</p>
<p>Если реквизиты доступа содержатся в файле, то нужно обязательно оградить его от скачивания. Проверьте, можно ли открыть файл, содержащий логин и пароль через адресную строку браузера!</p>
<p>2. Пароль хранится в файле, который индексируют поисковые системы</p>
<p>Исправив предыдущую ошибку, Вы заодно исправите и эту — иногда логин и пароль хранятся в файлах, которые без проблем находит Яндекс или Google! Не исправив эту ошибку, Вы рискуете тем, что хакер даже не специально взломает Ваш сайт, а просто найдёт жертву через поисковик и хакнет первого попавшегося неудачливого web–мастера! Не окажитесь им!</p>
<p>Кстати, закрыть доступ поисковикам можно через robots.txt. Полностью закрывать доступ к сайту не следует (а откуда тогда возьмутся посетители?), а следует только для тех директорий, которые не должен видеть посетитель, а, следовательно, и поисковый робот.</p>
<p>3. Пароль хранится в незашифрованном виде</p>
<p>Пароль нужно хранить в зашифрованном виде. Наиболее предпочтительным видом является хэширование (можно использовать алгоритмы MD5 или SHA1), так как прямым путём получить пароль из хэша невозможно. Но существуют онлайн–базы хэшей, в которых может храниться пароль и к Вашему хэшу, так что используйте неординарные пароли и пароли из случайного набора символов.</p>
<p>Для большей уверенности в надёжности защиты Вашего сайта, почитайте статьи по взлому, которые в свободном доступе опубликованы на хак–ресурсах, и попробуйте применить изложенные там методики, как говорится, &#8220;на себе&#8221;.</p>
<p>Удачной Вам защиты от взлома!</p>
]]></content:encoded>
			<wfw:commentRss>http://webteach.ru/web-programmirovanie/bezopasnost/obshhie-sovety-po-zashhite-sajta-ot-vzloma/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Защищаемся от SQL-инъекций</title>
		<link>http://webteach.ru/web-programmirovanie/bezopasnost/zashhishhaemsya-ot-sql-inekcij</link>
		<comments>http://webteach.ru/web-programmirovanie/bezopasnost/zashhishhaemsya-ot-sql-inekcij#comments</comments>
		<pubDate>Wed, 13 Aug 2008 12:47:14 +0000</pubDate>
		<dc:creator>kr4shr</dc:creator>
				<category><![CDATA[Безопасность]]></category>

		<guid isPermaLink="false">http://webteach.ru/2008/08/13/zashhishhaemsya-ot-sql-inekcij/</guid>
		<description><![CDATA[Если Вы уже достаточно хорошо знакомы с программированием сайтов в связке PHP + MySQL, то, наверное, знаете, что использование БД существенно облегчает программирование, уменьшает код, и вообще, намного удобнее. Также Вы должны знать, что использование MySQL имеет свои минусы. Сложные сайты на MySQL сильно нагружают сервера, существуют некоторые сложности с бэкапом сайта (на файлах всё [...]]]></description>
			<content:encoded><![CDATA[<p>Если Вы уже достаточно хорошо знакомы с программированием сайтов в связке PHP + MySQL, то, наверное, знаете, что использование БД существенно облегчает программирование, уменьшает код, и вообще, намного удобнее.</p>
<p>Также Вы должны знать, что использование MySQL имеет свои минусы. Сложные сайты на MySQL сильно нагружают сервера, существуют некоторые сложности с бэкапом сайта (на файлах всё несколько проще), и большая (нежели на файлах) вероятность взлома.</p>
<p>Связано это с тем, что кроме обычных уязвимостей, при работе в связке PHP + MySQL дополнительно существует дополнительный вид уязвимостей, который именуется MySQL-injections (MySQL-инъекции).</p>
<p>Суть этих уязвимостей заключается в том, что хакер может внедрить в SQL-запрос свой код. С помощью такого метода, например, можно получить пароли пользователей, можно получить пароль доступа к админке (и тогда сайт будет полностью под контролем хакера), или (так иногда поступают некоторые хакеры) получить базу e-mail адресов пользователей с целью продажи её спамерам.</p>
<p>Наиболее частым способом выявления MySQL-инъекций является добавление кавычки к одному из параметров, получаемых от пользователя. Более подробно о способах обнаружения и примерах использования MySQL-инъекций Вы можете найти в Интернете (эта информация немного выходит за рамки данной статьи). А сейчас мы займёмся собственно защитой скрипта от взлома с помощью MySQL-инъекций.</p>
<p><strong>Шаг №1. Скрываем &#8220;истинное лицо&#8221; страницы.</strong></p>
<p>Для начала упрячем подальше сам скрипт обработки пользовательских запросов. Для этого мы будем использовать mod_rewrite. Вот как это будет выглядеть: вместо ссылок вида index.php?id=1, например, мы будем использовать ссылки вида 1.html. Кроме защиты это придаст также более эстетический вид ссылок, а вдобавок и более качественную индексацию сайта поисковыми системами.</p>
<p>Вот как это делается: создаём файл .htaccess в той директории, где хранится скрипт (если файл уже существует, то редактируем его, вписав новые строчки).</p>
<blockquote><p>RewriteEngine on<br />
Options +FollowSymlinks<br />
RewriteBase /<br />
RewriteRule ^.htaccess$ &#8211; [F]<br />
RewriteRule ^([0-9]*).html index.php?id=$1</p></blockquote>
<p>Пройдёмся по строчкам: первая строка инициализирует mod_rewrite, вторая задаёт необходимые опции, третья определяет базовую директорию для перенаправления, четвёртая не позволит скачать хакеру файл .htaccess, а пятая описывает правило перенаправления.</p>
<p>Как это защитит от MySQL-инъекций? Если хакер введёт http://сайт.ru/1&#8242;.html, то mod_rewrite просто не пропустит этот запрос (так как строка 1&#8242; не удовлетворяет условию перенаправления: то, что стоит перед .html должно быть последовательностью цифр).</p>
<p>Это лишь первая линия защиты. Данный код не защити Вас от хакеров, разве что от самых новичков. Опытный хакер найдёт сам файл index.php и будет атаковать уже его. Для большего укрепления первой линии обороны можно дать один совет: делайте сложные, и, самое главное, необычные имена файлов. Например, файл с названием haha_diehack_3456.asp.php, хоть и выглядит нелепо, но зато вряд ли будет найден хакером. И ни в коем случае не &#8220;светите&#8221; нигде реальное название файла скрипта!</p>
<p><strong>Шаг №2. Фильтруем данные, полученные от пользователя.</strong></p>
<p>Любой пользователь без проблем может быть хакером, так что не советую Вам доверять данным, полученным от пользователя. Заотсрять на фильтрации конкретных типов данных я не буду, об этом написана отдельная, очень обстоятельная статья.</p>
<p>Добавить надо вот что: как бы не были профильтрованы данные, опасность всё-равно остаётся. Поэтому кроме &#8220;обычной&#8221; фильтрации данных, экранируем все опасные символы с помощью специальной функции: mysql_real_escape_string.</p>
<blockquote><p>$data = mysql_real_escape_string ($data, $connect);</p></blockquote>
<p>Где $data &#8211; переменная, хранящая какие-то данные, полученные от пользователя (данную операцию нужно проделать со ВСЕМИ переменными, используемыми в SQL-запросах!), а $connect &#8211; подключение к базе MySQL (задаваемое функцией mysql_connect). Если Вы используете MySQLi, то для него есть аналогичная функция mysqli_escape_string.</p>
<p>Ах да, чуть не забыл! Для того, чтобы эта защита работала, любые данные, передаваемые в SQL-запросе надо защищать одинарными кавычками:</p>
<blockquote><p>mysql_query (&#8220;SELECT * FROM table WHERE id = &#8216;$id&#8217;&#8221;)</p></blockquote>
<p>вместо</p>
<blockquote><p>mysql_query (&#8220;SELECT * FROM table WHERE id = $id&#8221;)</p></blockquote>
<p>Вот так в два шага можно частично обезопасить себя от взлома хакерами Вашего сайта. Также, хотелось бы дать Вам несколько рекомендаций по защите сайта от MySQL-инъекций:</p>
<ul>
<li>фильтруйте, фильтруйте и ещё раз фильтруйте! Фильтрация данных когда-нибудь спасёт Ваш сайт</li>
<li>тщательно формируйте SQL-запросы с использованием введённых пользователем переменных. Не делайте их на скорую руку</li>
<li>и также тщательно тестируйте свой сайт на SQL-инекции. Будет гораздо лучше, если ошибку обнаружите Вы, а не злостный хакер</li>
</ul>
<p>Желаю Вам успехов!</p>
]]></content:encoded>
			<wfw:commentRss>http://webteach.ru/web-programmirovanie/bezopasnost/zashhishhaemsya-ot-sql-inekcij/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Противостоим спам–ботам</title>
		<link>http://webteach.ru/web-programmirovanie/bezopasnost/protivostoim-spam%e2%80%93botam</link>
		<comments>http://webteach.ru/web-programmirovanie/bezopasnost/protivostoim-spam%e2%80%93botam#comments</comments>
		<pubDate>Tue, 12 Aug 2008 19:54:44 +0000</pubDate>
		<dc:creator>kr4shr</dc:creator>
				<category><![CDATA[Безопасность]]></category>

		<guid isPermaLink="false">http://webteach.ru/2008/08/12/protivostoim-spam%e2%80%93botam/</guid>
		<description><![CDATA[В данной статье я расскажу Вам как можно если не полностью защититься от атаки спам–ботов, то существенно сократить количество спама. Для начала хотелось бы отметить (из личного опыта), что самопальные скрипты спамятся меньше, особенно на сайтах с низкой и средней посещаемостью. Причина заключается в том, что для часто используемых вебмастерами скриптов давно написаны автоматические спамеры. [...]]]></description>
			<content:encoded><![CDATA[<p>В данной статье я расскажу Вам как можно если не полностью защититься от атаки спам–ботов, то существенно сократить количество спама.</p>
<p>Для начала хотелось бы отметить (из личного опыта), что самопальные скрипты спамятся меньше, особенно на сайтах с низкой и средней посещаемостью. Причина заключается в том, что для часто используемых вебмастерами скриптов давно написаны автоматические спамеры. Вручную же особо сильно спамить Вас никто не будет.</p>
<p><strong>Шаг №1. «Ключом по врагу», или защита от спама генерацией случайного ключа.</strong></p>
<p>Допустим, у нас есть файл index.php, в котором содержится форма, направляющая данные файлу post.php, который сохраняет их на сервере. Тогда в начале php–кода index.php пишем следующий код:</p>
<blockquote><p>// начинаем сессию<br />
session_start ();<br />
// генерируем случайную и достаточно длинную строку<br />
$key = md5 (rand (10000, 99999));<br />
// щаписываем его в сессию<br />
$_SESSION ['key'] = $key;</p></blockquote>
<p>Теперь в HTML–коде делаем скрытый элемент формы, в который записываем этот самый ключ.</p>
<blockquote><p>&lt;input type=&#8221;hidden&#8221; name=&#8221;key&#8221; value=&#8221;&lt;? echo $key; ?&gt;&#8221; /&gt;</p></blockquote>
<p>Теперь приступаем к файлу post.php. Просто проверям наличие и правильность ключа. Если ключ не задан или неправилен, то не обрабатываем запрос.</p>
<blockquote><p>// начинаем сессию<br />
session_start ();<br />
// проверяем наличие ключа<br />
if (!isset ($_POST ['key']))<br />
{<br />
// здесь Ваш код — запрос не обработан<br />
}<br />
elseif ($_POST ['key'] !== $_SESSION ['key'])<br />
{<br />
// здесь Ваш код — запрос не обработан<br />
}<br />
else<br />
{<br />
// здесь Ваш код — запрос обработан<br />
}</p></blockquote>
<p>Теперь поясню, отчего это может защитить. Этот код может защитить от автоматических спамеров, которые будут посылать запрос напрямую к post.php. От более продвинутых авттоматических спамеров, которые следуют путём пользователя, данный код не защитит, впрочем как и от простых людей, которые размещают свою рекламу вручную (хотя от них реально действующей защиты не существует). Но некоторый процент спама данный код отбросит, что уже неплохо.</p>
<p><strong>Шаг №2. «Стой! Кто идёт?», или проверяем, пришёл ли пользователь с нашего сайта.</strong></p>
<p>Также в post.php можно проверить, а с нашего ли сайта пришёл «пользователь»? Если не с нашего, то отправляем пользователя в баню.</p>
<p>Вот код, реализующий предыдущую простую идею (вносим в файл post.php)</p>
<blockquote><p>// проверяем, есть ли в адресе имя домена, на котором раположен Ваш сайт<br />
if (substr_count (getenv (&#8216;HTTP_REFERER&#8217;), &#8220;domen.ru&#8221;) == 0)<br />
{<br />
// если нет — не обрабатываем запрос (Ваш код здесь)<br />
}<br />
else<br />
{<br />
// иначе — не обрабатываем<br />
}</p></blockquote>
<p><strong>Шаг №3. «Проводим математический тест», или используем один из вариантов CAPTCHA.</strong></p>
<p>Под термином «CAPTCHA» некоторые пользователи понимаюь картинку с текстом, который доолжен ввести пользователь. Вообще–то, это лишь один из возможных вариантов CAPTCHA. Вообще, по определению, CAPTCHA — это автоматический тест для разделения компьютеров и людей, правда специальные программы обходят большинство CAPTCHA.</p>
<p>Мы не будем использовать самый распространённый вариант, тем более, что ему уже посвящена отдельная статья на этом сайте. Мы проведём тест на способность отправителя данных в форме делать простейшие арифметические операции, а конкретно, операцию сложения. Что–ж, приступим.</p>
<p>Для начала внесём изменения в файл index.php</p>
<p>Вот что мы впишем вверху, в php–коде</p>
<blockquote><p>// запускаем сессию, если уже запущена, не добавляйте эту строчку!<br />
session_start ();<br />
// генерируем два случайных числа от 1 до 15 и заносим их в сессию<br />
$num1 = rand (1, 15); $_SESSION ['num1'] = $num1;<br />
$num2 = rand (1, 15); $_SESSION ['num2'] = $num2;</p></blockquote>
<p>Теперь в форму заносим следующий код</p>
<blockquote><p>Сосчитайте сумму двух чисел: &lt;? echo $num1; ?&gt; + &lt;? echo $num2; ?&gt; = &lt;input type=&#8221;text&#8221; name=&#8221;sum&#8221; /&gt;</p></blockquote>
<p>В файле–обработчике post.php записываем следующие инструкции:</p>
<blockquote><p>// запускаем сессию, если не запущена<br />
session_start ();<br />
// проверяем наличие введённой суммы и её правильность<br />
if (!isset ($_POST ['sum']))<br />
{<br />
// здесь Ваш код — запрос не обработан<br />
}<br />
elseif ($_POST ['sum'] !== ($_SESSION ['num1']) + $_SESSION ['num2'])<br />
{<br />
// здесь Ваш код — запрос не обработан<br />
}<br />
else<br />
{<br />
// здесь Ваш код — запрос обработан<br />
}</p></blockquote>
<p>Используя три довольно–таки простых метода защиты от спам–ботов Вы существенно уменьшите количество спама на Вашей странице. Но, если спам всё ещё приходит, то могу дать Вам несколько советов (их реализация в статье не описана, так как они выходят за её рамки):</p>
<ul>
<li>текст чисел можно «спрятать» от просмотра в HTML–коде с помощью JavaScript–хитростей</li>
<li>также можно использовать более продвинутую CAPTCHA, Вы можете найти множество вариантов в Интернете</li>
<li>можно сделать проверку на наличие в информации стоп–слов, нопример, можно использовать те слова, которые Вы часто видите в спам–сообщениях</li>
</ul>
<p>Желаю Вам успехов в создании сайта, оборонённого от спам–ботов!</p>
]]></content:encoded>
			<wfw:commentRss>http://webteach.ru/web-programmirovanie/bezopasnost/protivostoim-spam%e2%80%93botam/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Фильтрация данных, полученных от пользователя.</title>
		<link>http://webteach.ru/web-programmirovanie/bezopasnost/filtraciya-dannyx-poluchennyx-ot-polzovatelya</link>
		<comments>http://webteach.ru/web-programmirovanie/bezopasnost/filtraciya-dannyx-poluchennyx-ot-polzovatelya#comments</comments>
		<pubDate>Wed, 16 Jul 2008 11:37:10 +0000</pubDate>
		<dc:creator>atillus</dc:creator>
				<category><![CDATA[Безопасность]]></category>

		<guid isPermaLink="false">http://webteach.ru/2008/07/16/filtraciya-dannyx-poluchennyx-ot-polzovatelya/</guid>
		<description><![CDATA[Одной из наиболее распространенных ошибок, приводящих к уязвимости PHP сценария, является недостаточная фильтрация полученных от пользователя данных, позволяющая злоумышленнику внедрить потенциально опасный код в передаваемые обработчику данные. Принимая данные, посланные в качестве GET параметров, либо из формы, передаваемой методом POST, необходимо быть на 100% уверенными в корректности и безопасности передаваемых данных Для проверки полученных от [...]]]></description>
			<content:encoded><![CDATA[<p>Одной из наиболее распространенных ошибок, приводящих к уязвимости PHP сценария, является недостаточная фильтрация полученных от пользователя данных, позволяющая злоумышленнику внедрить потенциально опасный код в передаваемые обработчику данные.<br />
Принимая данные, посланные в качестве GET параметров, либо из формы, передаваемой методом POST, необходимо быть на 100% уверенными в корректности и безопасности передаваемых данных <span id="more-50"></span></p>
<p>Для проверки полученных от пользователя данных мы будем использовать регулярные выражения. Прежде чем перейти к примерам, необходимо четко определить,<br />
каким образом будет выполняться запрет или допуск определенных символов.<br />
Наиболее частой ошибкой является использование регулярных выражений,  запрещающих определенные символы, но разрешающих любые другие. Мы же будем действовать иначе &#8211; запрещать ВСЕ, что  не разрешено.<br />
Тоесть, наше правило не: &#8220;разрешено ВСЕ, что не запрещено &#8220;, а &#8220;разрешено ТОЛЬКО то, что разрешено&#8221;!</p>
<p>Чтобы понять, что именно необходимо фильтровать, нужно четко представлять, что должно передаваться в параметрах. Например, наша форма содержит поля ввода для следующих данных: фамилия, имя, e-mail, пол, дата<br />
рождения, возраст и примечание.</p>
<p>Давайте рассмотрим каждое из полей и определим, какие символы можно разрешить к вводу:</p>
<p><strong>Фамилия, имя</strong> &#8211; эти поля являются текстовыми и<br />
могут содержать только и исключительно буквенные символы. Все остальные символы должны быть<br />
запрещены. Следовательно, регулярное выражение для этих полей будет выглядеть так:</p>
<blockquote><p>$str=ereg_replace(&#8220;[^a-zA-Z]&#8220;, &#8220;&#8221;, $str);</p></blockquote>
<p>В данном выражении мы запрещаем все, кроме букв от А до Z в нижнем<br />
и верхнем регистре. То есть, нет необходимости перечислять все запрещенные<br />
символы и заботиться о том, чтобы ничего не упустить.</p>
<p><strong>Email</strong> &#8211; тут немного сложнее. Давайте попробуем сформулировать задачу&#8230; Необходимо проверить, что введенная строка: содержит некоторое количество допустимых символов (допускаем буквенные символы, цифры, а так же знаки тире и подчеркивания), затем содержит символ &#8216;@&#8217; (&#8216;at&#8217;) (именуемый в народе &#8220;собакой&#8221;), затем опять некоторое количество допустимых символов, затем точку, и после точки от двух до 4 только буквенных символов&#8230; Все это реализуем регулярным выражением:</p>
<blockquote><p>if (!preg_match(&#8220;/^(?:[a-z0-9]+(?:[-_]?[a-z0-9]+)?@[a-z0-9]+(?:\.?[a-z0-9]+)?\.[a-z]{2,4})$/i&#8221;, $email))<br />
{<br />
echo &#8220;Неверный email!&#8221;;<br />
}<br />
else echo ОК!&#8217;;</p></blockquote>
<p><strong>Пол</strong> — может принимать только одно из значений: &#8216;M&#8217; или &#8216;F&#8217;. Любые другие символы беспощадно обрезаем. Регулярное выражение может выглядеть<br />
следующим образом:</p>
<blockquote><p>$sex=ereg_replace(&#8220;[^MF]&#8220;, &#8220;&#8221;, $sex);</p></blockquote>
<p>В результате все символы, кроме указанных двух , будут удалены из<br />
параметра.</p>
<p><strong>Дата рождения</strong> &#8211; удалить все, кроме цифр и символа точки,<br />
используемой в качестве разделителя числа, месяца и года:</p>
<blockquote><p>$bdate=ereg_replace(&#8220;[^0-9.]&#8220;, &#8220;&#8221;, $bdate);</p></blockquote>
<p><strong>Возраст</strong> — это число, значит, параметр не должен содержать ничего, кроме<br />
цифр.</p>
<blockquote><p>$str=ereg_replace(&#8220;[Л0-9]&#8220;, &#8220;&#8221;, $str);</p></blockquote>
<p><strong>Примечание</strong> &#8211; это самая сложная переменная, так как представляет собой некий текст, который может ввести пользователь.<br />
Как минимум,<br />
здесь необходимо запретить любые теги:</p>
<blockquote><p>$str=ereg_replace(&#8220;&lt;[A-Z]{1,}&gt;&#8221;,  &#8220;&#8221;, $str);</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://webteach.ru/web-programmirovanie/bezopasnost/filtraciya-dannyx-poluchennyx-ot-polzovatelya/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Защищаемся от СПАМа при помощи CAPTCHA.</title>
		<link>http://webteach.ru/web-programmirovanie/php/delaem-zashhitnuyu-kapchu</link>
		<comments>http://webteach.ru/web-programmirovanie/php/delaem-zashhitnuyu-kapchu#comments</comments>
		<pubDate>Thu, 22 May 2008 16:25:50 +0000</pubDate>
		<dc:creator>Another</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Безопасность]]></category>

		<guid isPermaLink="false">http://webteach.ru/2008/05/22/delaem-zashhitnuyu-kapchu/</guid>
		<description><![CDATA[CAPTCHA (Completely Automated Public Turing Test to Tell Computers and Humans Apart) &#8211; тест для защиты от программ-роботов. Последнее время очень часто используются защитные CAPTCHA (каптчи) для регистрации или отправки сообщений. В ходе этого урока мы попробуем написать такую каптчу, используя те знания, которые мы получили в процессе обучения на прошлых занятиях. Начнем. Для начала, [...]]]></description>
			<content:encoded><![CDATA[<p>CAPTCHA (Completely Automated Public Turing Test to Tell Computers and Humans Apart) &#8211; тест для защиты от программ-роботов. Последнее время очень часто используются защитные CAPTCHA (каптчи) для регистрации или отправки сообщений. В ходе этого урока мы попробуем написать такую каптчу, используя те знания, которые мы получили в процессе обучения на прошлых занятиях.<br />
<span id="more-36"></span><br />
Начнем.<br />
Для начала, чтобы разнообразить капчи мы откроем случайную картинку из папки. Эта картинка будет фоном нашей капчи.</p>
<blockquote><p>$image = imagecreatefromjpeg(&#8216;capch/capch_&#8217;.rand(0,9).&#8217;.jpg&#8217;);</p></blockquote>
<p>Теперь определим цвет текста для надписи на этой капчи:</p>
<blockquote><p>$textcolor = imagecolorallocate($image, 0, 0, 0);</p></blockquote>
<p>Текст каптчи мы будем брать из файла. Будет браться случайная строчка в этом файле.</p>
<blockquote><p>$file=&#8221;basecapch.php&#8221;;</p></blockquote>
<p>Теперь выбираем слово из этой базы и производим замены:</p>
<blockquote><p>$array=file($file);<br />
$rand=$array[rand(0,count($array)-1)];<br />
$rand = ereg_replace(&#8221; +&#8221;, &#8220;&#8221;, $rand);<br />
$rand = ereg_replace(&#8221;<br />
&#8220;, &#8220;&#8221;, $rand);</p></blockquote>
<p>Записываем этот текст во временный файл, который нужен для последующего обращения к нему для сверки данных. Это нужно для того, чтобы можно было перезагрузить капчу не перезагружая страницу целиком.</p>
<blockquote><p>$fp=fopen(&#8220;temp/capcha.txt&#8221;,&#8221;w+&#8221;);<br />
fwrite($fp,$rand);<br />
fclose($fp);</p></blockquote>
<p>Теперь выбираем случайный шрифт для текста из файла:</p>
<blockquote><p>imagettftext($image, 20, 1, 1, 30, $textcolor, &#8220;capch/&#8221;.rand(0,9).&#8221;.ttf&#8221;, $rand);</p></blockquote>
<p>и выводим всё на экран:</p>
<blockquote><p>header(&#8216;Content-type: image/jpeg&#8217;);<br />
imageJPEG($image);</p></blockquote>
<p>Для правильной работы этой капчи – установите ее во фрейме, а фрейм должен отображать файл с html ссылкой на самого &#8211; себя. Пример:</p>
<blockquote><p>&lt;a href=”capche.html”&gt;&lt;img src=”capcha.php”&lt;/a&gt;</p></blockquote>
<p>Теперь если пользователь кликнет по капчи, то она перезагрузится и отобразится новая, а на страницу действие не окажет.</p>
<p><strong>Использованные функции:</strong></p>
<p><strong><a href="http://www.php.net/manual/ru/function.ereg-replace.php">ereg_replace</a></strong> &#8211; Заменяет регулярное выражение<br />
<strong><a href="http://www.php.net/manual/ru/function.imagecolorallocate.php  ">Imagecolorallocate</a></strong> — Распределяет цвет для изображения<br />
<strong><a href="http://www.php.net/manual/ru/function.fopen.php">fopen</a></strong> — Открывает файл или URL</p>
]]></content:encoded>
			<wfw:commentRss>http://webteach.ru/web-programmirovanie/php/delaem-zashhitnuyu-kapchu/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Пишем систему бана по ip.</title>
		<link>http://webteach.ru/web-programmirovanie/php/pishem-sistemu-bana-po-ip</link>
		<comments>http://webteach.ru/web-programmirovanie/php/pishem-sistemu-bana-po-ip#comments</comments>
		<pubDate>Tue, 20 May 2008 18:19:59 +0000</pubDate>
		<dc:creator>Another</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Безопасность]]></category>

		<guid isPermaLink="false">http://webteach.ru/2008/05/20/pishem-sistemu-bana-po-ip/</guid>
		<description><![CDATA[Часто владельцы более или менее крупных сайтов встречаются с “плохими юзерами”, с юзерами, которые так или иначе вредят нормальной работе системы. Таких юзеров нужно банить по ip. На этот раз я расскажу как сделать такую систему бана. Для начало создадим файл с ip забаниных юзеров и причиной их бана. Этот файл должен иметь следующую структуру: [...]]]></description>
			<content:encoded><![CDATA[<p>Часто владельцы более или менее крупных сайтов встречаются с “плохими юзерами”, с юзерами, которые так или иначе вредят нормальной работе системы. Таких юзеров нужно банить по ip. На этот раз я расскажу как сделать такую систему бана.<br />
<span id="more-29"></span><br />
Для начало создадим файл с ip забаниных юзеров и причиной их бана. Этот файл должен иметь следующую структуру:</p>
<blockquote><p>Ip юзера::причина бана.</p></blockquote>
<p>И сохраним его &#8211; files/ban.login</p>
<p>Теперь начнем писать систему бана.</p>
<p>Открываем разными способами этот файд:</p>
<blockquote><p>&lt;?<br />
if (file_exists(&#8220;files/ban.login&#8221;)){ $file = file(&#8220;files/ban.login&#8221;); }<br />
else{$file = file(&#8220;./files/ban.login&#8221;);}</p></blockquote>
<p>Теперь считаем кол-во банов:</p>
<blockquote><p>for($i=0;$i&lt;count($file);$i++)</p></blockquote>
<p>Всё ок, теперь разбиваем все строки:</p>
<blockquote><p>{<br />
$q = explode(&#8220;::&#8221;, $file[$i]);<br />
$banlogin = $q[0];<br />
}</p></blockquote>
<p>Проверяем, не забанин ли пользователь:</p>
<blockquote><p>if (ereg(&#8220;^$banlogin$&#8221;,$login) || ereg(&#8220;^$banlogin$&#8221;,$login2) and $userr){<br />
echo(&#8220;Вам закрыт доступ на сайт. Причина: &#8220;.$q[1]);</p>
<p>}<br />
else{<br />
$file=implode(&#8221;,file(&#8216;files/ban.ip&#8217;));<br />
$ip=$_SERVER['REMOTE_ADDR'];<br />
if (ereg($ip,$file)){<br />
echo(&#8220;Вам закрыт доступ на сайт.&#8221;);</p>
<p>}<br />
else{?&gt;</p></blockquote>
<p>И контент:</p>
<blockquote><p>Основной контент<br />
&lt;?<br />
}<br />
?&gt;</p></blockquote>
<p>Вот и всё, система бана по ip готова.</p>
<p><strong>Использовались функции: </strong></p>
<ul>
<li><strong><a href="http://www.php.net/manual/ru/function.count.php">count</a></strong> — Посчитать количество элементов массива или количество свойств объекта</li>
<li><a href="http://www.php.net/manual/ru/function.ereg.php"><strong>ereg</strong></a> — ищет со строгим регистром</li>
<li><strong><a href="http://www.php.net/manual/ru/function.explode.php">explode</a></strong> &#8211; Разбивает строку на подстроки</li>
<li><strong><a href="http://www.php.net/manual/ru/function.implode.php">implode</a></strong> — Объединяет элементы массива в строку</li>
<li><strong><a href="http://www.php.net/manual/ru/function.file-exists.php">file_exists</a></strong> — Проверить наличие указанного файла или каталога</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://webteach.ru/web-programmirovanie/php/pishem-sistemu-bana-po-ip/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Использование и настройка .htaccess</title>
		<link>http://webteach.ru/web-programmirovanie/unix/ispolzovanie-i-nastrojka-htaccess</link>
		<comments>http://webteach.ru/web-programmirovanie/unix/ispolzovanie-i-nastrojka-htaccess#comments</comments>
		<pubDate>Mon, 19 May 2008 12:54:53 +0000</pubDate>
		<dc:creator>Another</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[Безопасность]]></category>

		<guid isPermaLink="false">http://webteach.ru/2008/05/19/ispolzovanie-i-nastrojka-htaccess/</guid>
		<description><![CDATA[Часто возникают случаи, когда нужно перенаправить весь трафик с домена, перенаправить по определенному Ip, изменить название индекса страницы, выставить права на выполнение php кода файлам с другим расширением, обработать ошибки и т.д. и т.п. Все эти проблемы можно решить всего одним файлом &#8211; .htaccess. Рассмотрим основные примеры использования .htaccess: 1) Установка пароля на директорию: AuthName [...]]]></description>
			<content:encoded><![CDATA[<p>Часто возникают случаи, когда нужно перенаправить весь трафик с домена, перенаправить по определенному Ip, изменить название индекса страницы, выставить права на выполнение php кода файлам с другим расширением, обработать ошибки и т.д. и т.п. Все эти проблемы можно решить всего одним файлом &#8211; .htaccess.</p>
<p><span id="more-22"></span></p>
<p>Рассмотрим основные примеры использования .htaccess:</p>
<p><strong>1)	Установка пароля на директорию:</strong></p>
<blockquote><p>AuthName &#8220;Admin page&#8221;<br />
AuthType Basic<br />
AuthUserFile /pub/home/server/.pass<br />
require valid-user</p></blockquote>
<p><strong>2)	Запретить доступа к файлам с определенными расширениями:</strong></p>
<blockquote><p>&lt;Files ~ &#8220;\.(xls|doc|txt)$&#8221;&gt;<br />
deny from all<br />
&lt;/Files&gt;</p></blockquote>
<p>Запрещен доступ к файлам с расширениями .xls, .doc, .txt. Для запрета только для одного типа расширение эта функция применяется так:</p>
<blockquote><p>&lt;Files &#8220;*.txt&#8221;&gt;</p></blockquote>
<p><strong>3)	Глобальное перенаправление трафика:</strong></p>
<blockquote><p>Redirect / http://www.newsite.ru</p></blockquote>
<p><strong>4)	Перенаправление трафика только при запросе определенных страниц:</strong></p>
<blockquote><p>redirect /files http://webteach.ru/nofiles<br />
redirect /images http://webteach.ru/noimages</p></blockquote>
<p>При запросе страниц из каталогов files и images будет произведено перенаправление на новые адреса.</p>
<p><strong>5)	Перенаправление трафика по IP:</strong></p>
<blockquote><p>SetEnvIf REMOTE_ADDR 192.168.0.1 REDIR=&#8221;redir&#8221;<br />
RewriteCond %{REDIR} redir<br />
RewriteRule ^/$ /ban_users.html</p></blockquote>
<p><strong>6)	Обработка ошибок Apache:</strong></p>
<blockquote><p>ErrorDocument 401 /401.html<br />
ErrorDocument 403 /403.html<br />
ErrorDocument 404 /404.html<br />
ErrorDocument 500 /500.html</p></blockquote>
<p><strong>7)	Запрет доступа ко всем файлам и каталогам в текущей директории:</strong></p>
<blockquote><p>deny from all</p></blockquote>
<p><strong>8 )	Запретить доступ к определенному файлу:</strong></p>
<blockquote><p>&lt;Files config.php&gt;<br />
deny from all<br />
&lt;/Files&gt;</p></blockquote>
<p><strong>9)	Разрешить доступ только с определенного IP-адреса:</strong></p>
<blockquote><p>order deny,allow<br />
deny from all<br />
allow from 192.198.0.1</p></blockquote>
<p><strong>10)	Запрет на отображение содержимого каталога при отсутствии индексного файла:</strong></p>
<blockquote><p>Options –Indexes</p></blockquote>
<p>Это десятка основных и наиболее часто используемых настроек для файла .htaccess. Пользуйтесь и экспериментируйте <img src='http://webteach.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://webteach.ru/web-programmirovanie/unix/ispolzovanie-i-nastrojka-htaccess/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Пишем защиту админ зоны. Учимся работать с cookies.</title>
		<link>http://webteach.ru/web-programmirovanie/php/pishem-zashhitu-admin-zony-uchimsja-rabotat-s-cookies</link>
		<comments>http://webteach.ru/web-programmirovanie/php/pishem-zashhitu-admin-zony-uchimsja-rabotat-s-cookies#comments</comments>
		<pubDate>Mon, 19 May 2008 08:59:56 +0000</pubDate>
		<dc:creator>Another</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Безопасность]]></category>

		<guid isPermaLink="false">http://webteach.ru/2008/05/19/18/</guid>
		<description><![CDATA[Многие сталкивались с проблемой защиты админ зоны. Мы рассмотрим один из вариантов такой защиты… Начнем с создание файлов… Создаем файл config.php который будет содержать в переменных логин и пароль админа. Листинг файла config.php: &#60;?php $login=&#8221;Admin&#8221;; $pass=&#8221;password&#8221;; ?&#62; Теперь приступим к написанию основного кода. Для начало открываем наш файл с конфигам для последующей работы с переменными: [...]]]></description>
			<content:encoded><![CDATA[<p>Многие сталкивались с проблемой защиты админ зоны. Мы рассмотрим один из вариантов такой защиты…<br />
Начнем с создание файлов… Создаем файл config.php который будет содержать в переменных логин и пароль админа.<br />
<span id="more-18"></span><strong><em>Листинг файла config.php:</em></strong></p>
<blockquote><p>&lt;?php<br />
$login=&#8221;Admin&#8221;;<br />
$pass=&#8221;password&#8221;;<br />
?&gt;</p></blockquote>
<p>Теперь приступим к написанию основного кода. Для начало открываем наш файл с конфигам для последующей работы с переменными:</p>
<blockquote><p>include(&#8220;config.php&#8221;);</p></blockquote>
<p>После &#8211; проверяем условия. Если параметр post совпадает с переменными из фала, то создает cookies и открывает файл админки:</p>
<blockquote><p>if($_POST['user']==$login and $_POST['passw']==$pass):<br />
setcookie(&#8220;userr&#8221;,$_POST['user']);<br />
setcookie(&#8220;passs&#8221;,$_POST['passw']);<br />
include(&#8220;admincp.php&#8221;);</p></blockquote>
<p>Если cookie существует, и совпадает с переменными из файла, то входит в защитную зону:</p>
<blockquote><p>elseif($userr==$login and $passs==$pass):<br />
include(&#8220;admincp.php&#8221;);</p></blockquote>
<p>$userr и $passs передают cookie и содержат  данные, которые мы туда записали.<br />
Теперь заканчиваем наши условия и выводим форму для входа:</p>
<blockquote><p>else:<br />
?&gt;<br />
&lt;form method=POST&gt;<br />
Login: &lt;input type=text name=user maxlength=80 size=30&gt;<br />
&lt;br&gt;Pssword: &lt;input type=password name=passw maxlength=80 size=30&gt;<br />
&lt;input type=&#8221;submit&#8221; value=&#8221;Вход&#8221;&gt;<br />
&lt;/form&gt;<br />
&lt;?<br />
endif;<br />
?&gt;</p></blockquote>
<p>Форма для входа написана, теперь пишем код, который будет удалять наши cookie:</p>
<blockquote><p>&lt;?<br />
setcookie(&#8220;userr&#8221;);<br />
setcookie(&#8220;passs&#8221;);<br />
print &#8216;&lt;meta http-equiv=&#8221;refresh&#8221; content=&#8221;0; url=index.php&#8221;&gt;&#8217;;<br />
?&gt;</p></blockquote>
<p>Содержимое print просто перенесет нас на главную страницу после удаления cookie. Поместив этот код в файл exit.php.</p>
<p>В админ панели ставим ссылку на этот файл. Теперь защищаем файл админки от просмотра, это мы осуществим так… В файле админки (admincp.php) в самом начале пишем код:</p>
<blockquote><p>&lt;?<br />
if(!defined(&#8220;INDEX&#8221;)) die(&#8220;Доступ к файлу закрыт!&#8221;);<br />
?&gt;</p></blockquote>
<p>Это значит, что если передать параметру defined(&#8220;INDEX&#8221;) – yse, страница будет грузится дальше, а если нет, то выведет “ Доступ к файлу закрыт ”. Теперь правим открытие этого файла – в скрипте… Дописываем перед include(&#8220;admincp.php&#8221;); код:</p>
<blockquote><p>define(&#8220;INDEX&#8221;, &#8220;yes&#8221;);</p></blockquote>
<p>Теперь этот файл откроется.</p>
<p>Всё, файл защищен, можно туда вложить защищаемую информацию.<br />
Ниже приведены листинги готовых файлов…</p>
<p><em><strong>Листинг файла index.php:</strong></em></p>
<blockquote><p>&lt;?php<br />
include(&#8220;config.php&#8221;);<br />
if($_POST['user']==$login and $_POST['passw']==$pass):<br />
setcookie(&#8220;userr&#8221;,$_POST['user']);<br />
setcookie(&#8220;passs&#8221;,$_POST['passw']);<br />
define(&#8220;INDEX&#8221;, &#8220;yes&#8221;);<br />
include(&#8220;admincp.php&#8221;);<br />
elseif($userr==$login and $passs==$pass):<br />
define(&#8220;INDEX&#8221;, &#8220;yes&#8221;);<br />
include(&#8220;admincp.php&#8221;);<br />
else:<br />
?&gt;<br />
&lt;form method=POST&gt;<br />
Login: &lt;input type=text name=user maxlength=80 size=30&gt;<br />
&lt;br&gt;Pssword: &lt;input type=password name=passw maxlength=80 size=30&gt;<br />
&lt;input type=&#8221;submit&#8221; value=&#8221;Вход&#8221;&gt;<br />
&lt;/form&gt;<br />
&lt;?<br />
endif;<br />
?&gt;</p></blockquote>
<p><em><strong>Листинг файла admincp.php:</strong></em></p>
<blockquote><p>&lt;?<br />
if(!defined(&#8220;INDEX&#8221;)) die(&#8220;Доступ к файлу закрыт!&#8221;);<br />
?&gt;<br />
&lt;a href=&#8221;exit.php&#8221; mce_href=&#8221;exit.php&#8221;&gt;Выход&lt;/a&gt;<br />
&lt;br&gt;&lt;br&gt;&lt;h1&gt;Защищаемая инфармация!&lt;/h1&gt;</p>
<p>Листинг файла exit.php:<br />
&lt;?php<br />
$login=&#8221;Admin&#8221;;<br />
$pass=&#8221;pass&#8221;;<br />
?&gt;</p></blockquote>
<p>В ходе этого урока мы подробнее разобрали условия if, else и т.д., научились создавать и удалять cookies, и научились грамотно защищать файл.</p>
<p><strong>Новые функции, которые мы изучили в этом уроке:</strong></p>
<ul>
<li><a title="die" href="http://www.php.net/manual/ru/function.die.php"><strong>die</strong></a><strong> </strong>-  Эквивалентен exit(), выведит сообщение, и закончит текущий сценарий.</li>
<li><a title="defined" href="http://www.php.net/manual/ru/function.defined.php"><strong>defined</strong></a><strong> </strong>- Проверяет, существует ли данная названная константа.</li>
<li><a title="include" href="http://www.php.net/manual/ru/function.include.php"><strong>include</strong></a><strong> </strong>- включает и  выполняет указанный файл.</li>
<li><a title="setcookie" href="http://www.php.net/manual/ru/function.setcookie.php"><strong>setcookie</strong></a><strong> </strong>- передает данные cookies.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://webteach.ru/web-programmirovanie/php/pishem-zashhitu-admin-zony-uchimsja-rabotat-s-cookies/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

