Вы потратили много времени и денег на создание собственного сайта. Вы же не хотите совершать такие ошибки, которые, в лучшем случае, будут раздражать пользователей, а в худшем - приведут к тому, что вы просто потеряете клиентов? В конце концов, если вы настраиваете против себя пользователей, то вы теряете прибыль. А кому это по карману?
Якоб Нильсен, директор Нильсен Норманн Групп, утверждает, что существует десять самых распространенных ошибок:
1 Отсутствие цен. Цена - это часть минимальной информации, необходимой пользователям, чтобы понять суть предложения. Если цены отсутствуют, то посетители могут просто не понять о чем идет речь. Указание цен позволяет отличать один товар от другого.
2 Негибкие поисковики. Чересчур «образованные» поисковики снижают юзибилити, поскольку пользователи могут допустить опечатку или не знать как правильно пишется слово. Поисковики также должны отдавать приоритет не количеству вариантов запросов, а важности каждого документа.
3 Горизонтальное прокручивание. Пользователи ненавидят, когда их заставляют осуществлять прокрутку слева на право. Страницы, которые требуют горизонтального прокручивания в стандартном окне (800*600 пикселей) просто ужасны!
4 Фиксированный размер шрифта. В 95% случаев фиксированный шрифт имеет просто крошечные размеры, снижая удобочитаемость страницы. Пользователи должны иметь возможность самостоятельно изменять размер текста по необходимости.
5 Блоки текста - их скучно читать, что приводит к потере пользователей.
6 JavaScript в ссылках. Если ссылка ведет себя непредсказуемым образом, то пользователи чувствуют себя потерявшимися. Они также ненавидят поп-апы.
7 Нечасто задаваемые вопросы в FAQ. Не указывайте вопросы, которые бы вы хотели, чтобы вам задали.
8 Сбор e-mail адресов при отсутствии политик неразглашения информации. Когда web-сайты просят e-mail, пользователи обычно реагируют отрицательно. В наше время спама никто не хочет вот так просто сообщать такую информацию.
9 URL длиной больше 75 знаков, которые почти невозможно отправить другу. Если URL слишком длинный и весь не виден в строке адреса, то пользователи просто не будут знать, как его скопировать. А если ссылка не работает, то они могут не знать, как вернуться на изначальную страницу.
10 Ссылки «mail to» в неожиданных местах. Не размещайте такие ссылки под именами, вместо этого четко укажите, что это e-mail адрес.
Существует множество компаний, которые могут помочь вам избежать подобных ошибок.
Старайтесь избегать этих 10 ошибок, указанных Нильсеном, при создании своего web-сайта, и пользователям он понравится, что повлияет на уровень посещаемости.
Браузер работает с CSS следующим образом:
1 ПАРСИНГ HTML-ДОКУМЕНТА И СОЗДАНИЕ ДЕРЕВА ЭЛЕМЕНТОВ;
2 ИДЕНТИФИКАЦИЯ ЦЕЛЕВОГО ТИПА МЕДИА (УСТРОЙСТВА ОТОБРАЖЕНИЯ);
3 ПОЛУЧЕНИЕ ВСЕХ СТИЛЕЙ ДОКУМЕНТА В СООТВЕТСТВИИ С УКАЗАННЫМИ ТИПАМИ МЕДИА;
4 АННОТАЦИЯ КАЖДОГО ЭЛЕМЕНТА ПУТЕМ ПРИСВОЕНИЯ СВОЙСТВАМ ЭЛЕМЕНТОВ ЗНАЧЕНИЙ ИСХОДЯ ИЗ УКАЗАННЫХ ДЛЯ НИХ СТИЛЕЙ, А ТАКЖЕ С УЧЕТОМ НАСЛЕДОВАНИЯ РОДИТЕЛЬСКИХ;
5 ГЕНЕРАЦИЯ СТРУКТУРЫ ФОРМАТИРОВАНИЯ НА ОСНОВЕ ДЕРЕВА ДОКУМЕНТА;
6 ПЕРЕДАЧА ФОРМАТИРОВАННОГО ДОКУМЕНТА НА ВЫВОД (ДИСПЛЕЙ, НА ПЕЧАТЬ И Т.Д.).
Для web-страниц существует три типа подключения стилей, которые разграничивают по источнику:
1 АВТОРСКИЕ СТИЛИ (СОЗДАННЫЕ РАЗРАБОТЧИКАМИ САЙТА), КОТОРЫЕ, В СВОЮ ОЧЕРЕДЬ, МОГУТ ПРИМЕНЯТЬСЯ ТРЕМЯ РАЗЛИЧНЫМИ СПОСОБАМИ:
А) ВНЕШНИЕ ТАБЛИЦЫ СТИЛЕЙ.
РАСПОЛАГАЮТСЯ В ОТДЕЛЬНОМ ФАЙЛЕ *.CSS, НА КОТОРЫЙ ДАЕТСЯ ССЫЛКА В HTML-ДОКУМЕНТЕ. НАПРИМЕР:
<style type="text/css" media="screen">@import url(/styles/screen.css);</style>
В) ВСТРОЕННЫЕ
SQL Injection – внедрение произвольных sql-команд, в результате которого меняется логика оригинального запроса к базе данных. Это представляет серьезную угрозу, так как таким образом злоумышленник может утянуть из нее конфиденциальную информацию. Типичный пример — через ошибки в web-интерфейсе у разных провайдеров не раз крали базы с логинами и паролями пользователей.
Успешность атаки SQL Injection не зависит от используемого для написания web-приложений языка программирования - будь то PHP, Perl или ASР. Если сценарий работает с базами данных, а проверка входных параметров отсутствует, то всегда есть возможность внедрения sql-кода. Это относится не только к web-приложениям, но и к обычным программам, которые работают с базами данныхЧтобы не грызть сухую теорию, давай рассмотрим небольшой пример. Допустим, у тебя на сервере баз данных есть своя база, а в ней - таблица Users, в которой хранится информация обо всех зарегистрированных пользователях. Как правило, такие таблицы имеют минимум три поля: id (идентификатор), UserName (имя пользователя) и Password (пароль). Допустим, для того чтобы посмотреть профиль пользователя, используется следующий запрос к базе данных:
SELECT * FROM UsersWHERE id = переменная
В данном примере видно, что значение поля id будет сравниваться со значением переменной. Если в качестве значения переменной указать, например, 10, то честный пользователь увидит свой профиль. Вроде все хорошо и прекрасно, но что будет, если модифицировать запрос до такого вида:
SELECT * FROM Users WHERE id = переменная OR UserName = “Администратор”
После выполнения такого запроса отобразится запись не только с id = значению переменной, но и запись, в которой значение поля UserName = Администратор. То есть после такого запроса хакер увидит всю информацию об учетной записи «Администратор».
www.site.ru/profile.php?id=10 OR UserName=’Администратор’
На этом примере видно, что после того, как мы дописали к URL дополнительные sql-команды (OR UserName=…), логика запроса изменилась. Отсутствие фильтрации входных параметров - вот причина, из-за которой появилась возможность воспользоваться SQL Injection! Чтобы этого не произошло, необходимо перед выполнением запроса в сценарии кое-что проверить. В данном случае достаточно просмотреть содержимое одной (это при условии, что остальные переменные нигде не видны, но лучше проверять все) переменной id: в ней не должно быть никаких символов, кроме цифр от 0 до 9.
Проблема специальных символов
Знатоки языка запросов SQL знают, что с помощью специальных символов можно полностью изменить логику запроса и обойти многие ограничения, которые изначально придумывал программист.
Одинарные и двойные кавычки
Их используют для выделения значений. Предыдущий пример (UserName = 'Администратор') как раз об этом. Первое, с чего начинает хакер свое исследование, это попытка вставки одинарной кавычки вместе со значением переменной. Если отсутствует фильтрация на спецсимволы, то взломщик увидит ошибку, сгенерированную сервером БД. В результате он уже точно будет знать, что есть возможность внедрить свой sql-код.
Значит, в своем сценарии надо отключить вывод любых ошибок. Лучше в момент возникновения ошибки вывести свой текст, чем текст, который сгенерирует сервер БД.
Двойное тире
Два тире подряд в SQL означают начало комментария. То есть все, что будет после двух знаков тире, не будет восприниматься как часть запроса. Рассмотрим пример:
SELECT * FROM Users WHERE UserName=root AND Password= переменная
Это запрос должен выбрать запись, где поле UserName равно root (как правило, в основном это имя используется для обозначения супер-пользователя), а поле Password равно значению переменной. Имя мы знаем, а пароль, естественно, нет. Но это не повод отчаиваться - можно умудриться модифицировать запрос до такого вида:
SELECT * FROM Users WHERE UserName=root--AND Password = переменная
В результате, код, который стоит после двух знаков тире (AND Password = переменная), не будет выполнен, и, следовательно, мы успешно проходим данную проверку, зная одно лишь имя пользователя.
В SQL есть еще пара символов, которые обозначают комментарий, — «/*». Если вдруг оказывается, что знак тире фильтруется, то можно воспользоваться «/*». Принцип действия тот же самый. Весь текст запроса, который стоит после этих символов, не будет выполняться, а значит, можно отбросить лишние проверки и обойти защиту.
Знак
В этой статье я хочу дать несколько советов, следуя которым можно значительно ускорить обработку PHP-скриптов, тем самым, разгрузив сервер хостера от бесполезной работы в пользу более полезной. Перед тем как начать рефакторинг - посмотрите сколько времени и памяти кушает ваш проект, а теперь вперед - оптимизируем. После того как нелегкий труд будет закончен замерим результаты - поразительный прирост производительности - процентов 5-6% - удивлены? Давайте немного проанализируем советы приведенные в данной статье:
Выносите $переменные из “текстовых строк” - ускорение 25-40%
$x="test $test";
$x="test"; $x.=$test;
$x="test".$test;
Посчитайте кол-во таких строк в вашем проекте, я думаю их кол-во будет стремиться к нулю, если вы используете какой-нить шаблонизатор (Smarty).
Короткие переменные не более 7 символов - ускорение 15%
Читабельность кода от этого не улучшится, я обычно называю переменную по имени объекта хранящегося в ней, а имена объектов частенько переваливают за десяток символов. Но переменные от 32 символов могут тормознуть программу почти на половину.
Тормозят ли массивы в PHP? Вернее, как именно. Ускорение 40%
Доступ к элементу одномерного ассоциативного массива по имени, не заключенному в кавычки, тормозит процесс на треть (относительно того же примера, но в кавычках). А вот в двухмерном массиве программа работает медленне аж в 2.5 раза! После такого теста хочешь не хочешь, а в любой программе пожертвуешь удобством - обращение к элементам массива по имени без кавычек.
$test["aa"]=1;$test["bb"]=1;$test["cc"]=1;$test["dd"]=1;$test["ee"]=1;
$test[aa]=1; $test[bb]=1; $test[cc]=1; $test[dd]=1; $test[ee]=1;
$test[a][b]=1;$test[x][y]=1;$test[d][c]=1;$test[a][s]=1;$test[b][n]=1;
Выносите многомерные массивы из “текстовых строк” - ускорение 25-30%
При использовании многомерных массивов в строках наблюдается заметное снижение скорости Из-за многомерности нужно заключать переменные в парные фигурные скобки. Да и читабельность повыше будет.
$x="test {$myarray[name][second][1]} test";
Циклы: for, foreach, while, count/sizeof() - ускорение 15%-30%
Бесспорный вывод - использование foreach сильно тормозит дело, а между for и while большой разницы нет. (На голом тесте
Для чтения файла file() быстрее, чем fopen+цикл - ускорение 40%
Чтобы прочитать в массив $x файл размером 1Мб (100 000 строк по 10 байт) можно воспользоваться двумя вариантами: чтение файла с помощью file(), либо традиционным методом fopen/fgets. Разумеется, для файлов разного объема и содержимого скорость может меняться. Но в данном примере статистика такова:
$f=fopen("1Mb_file.txt","r") or die(1);
while($x[]=fgets($f,1000));
fclose($f);
Аналогичный вариант
$f=fopen("1Mb_file.txt","r") or die(1);
while($s=fgets($f,1000)) $x[]=$s;
fclose($f);
работают еще медленнее (во втором случае лишняя функция feof() заметно снижает скорость). Тот же тест, но на 15Мб файле (100 000 строк по 150 байт) показывает разницу в 50%, в пользу file().
Архитектура
Тут есть где разойтись, и начать писать весь проект заново ;) но лучше чуть-чуть напильником пошаманить - зачастую эффект будет поразительным. Для начала - не подключайте сразу все библиотеки используемые в проекте - всё только по требованию. Старайтесь разделить проект на составляющие - шаблоны
Как читать RSS-подписки?
Существует ряд программ, при помощи которых можно просматривать обновления ваших RSS-подписок. Например браузер Opera имеет встроенный функционал для работы с RSS-подписками
Textpattern
Адрес в сети: http://textpattern.ru
Textpattern – система управления контентом, написанная на PHP и использует базу данных MySQL. Система эффективна как в качестве блогового движка, так и в качестве системы публикации статей и новостей. Textpattern отличается понятным интерфейсом, а также тем, что способна генерировать страницы на чистом HTML.
Textpattern позволяет создать любой сайт, предлагая для этого гибкие и функциональные инструменты: модуль управления статьями с возможностью сортировки по дате и/или по категории, модуль комментариев к статьям, поисковый модуль, наличие RSS/ATOM ленты. Устройство системы администрирования также является одной из привлекательных сторон системы. Эргономичный интерфейс очень прост и понятен и позволяет редактировать материалы и управлять сайтом без каких-либо проблем. В зоне администрирования можно установить общие настройки для всего сайта, распределить пользователей по группам (всего 6 групп с различным уровнем привилегий), посмотреть статистику посещаемости, получить доступ к диагностическим инструментам, инсталлировать плагины.
Plume CMS
Адрес в сети: http://www.plume-cms.net/en
Xoops
Адрес в сети: http://www.e-xoops.com
Joomla
Адрес в сети: http://joomlaportal.ru