Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен / web / example1 / Введение в PHP.doc
Скачиваний:
96
Добавлен:
18.05.2015
Размер:
3 Mб
Скачать

Нет принципов написания кода

Принципы написания кода должны включать все, например, как разделить исходный код, до таких как правила именования переменных (например, префиксы и суффиксы, написание глобальных переменных заглавными буквами). Принципы определяют общепризнанные стандарты, которым следуют все участники проекта независимо от собственного стиля программирования. Они могут служить для определения спорных моментов, таких как:

Какие переменные глобальные и как они обозначаются, как глобальные.

Структура документа, обозначающая какой файл должен быть помещен в lib, а какой в src каталоги.

Стиль комментариев и их написание.

Написание документации.

Длина строки.

Принципы написания кода должны быть оформлены, как официальный документ их должен придерживаться каждый программист, задействованный в проекте. Когда проект завершен, документация сохраняется на будущее, как справочная информация.

Настоящий документ обычно достигает размера в 10-40 листов. Обратите внимание, что вам не понадобиться каждый раз писать его заново. Старый вариант всегда можно изменить по необходимости и использовать в новом проекте.

Вот пример такого документа.

Вступление

Этот документ содержит следующую инфомацию:

Файловая Структура

Заголовки и Подвалы

Документация по коду

Стиль комментирования, назначение и определение комментариев

Основные моменты разработки

Именование переменных

Файловая Структура

Много вопросов, связанных с ошибками при написании кода PHP рассмотрены в книге

Стерлинга Хьюза. (Sterling Hughes) - "Настольная книга программиста PHP" (The PHP Developer's Cookbook), была издана в октябре 2000 года издательством "Sams publishing".

Еще несколько полезных правил:

Не стоит тратить время на придумывание супер-хитрых алгоритмов. Время программиста стоит дороже времени этих железок.

Пишите скрипт так, как будто завтра Вам придется его дорабатывать. Старайтесь продумывать его так, чтобы его было легко масштабировать

Вопросы защиты данных

Процедура входа пользователя в систему делится на три части: идентификация; аутентификация; предоставление прав доступа.

Идентификация – это заявление пользователя о собственном статусе. Информация, которую пользователь предъявил при идентификации, требует подтверждения в системе аутентификации. Пользователи проверяются по одному из трёх параметров аутентификации: по тому, что они знают, чем владеют или что из себя представляют. Наиболее часто в WEB используется метод ''что они знают''. При первой регистрации пользователю назначается пароль, который он должен помнить и держать в секрете. Аутентификация заключается в подтверждении личности пользователя паролем. Если аутентификация прошла успешно, система завершает вход пользователя, связывая личность пользователя и данные управления доступом с пользовательским сеансом. Система может устанавливать различные права доступа для различных пользователей.

Аутентификация средствами php

PHP предоставляет средства реализации аутентификации. Чтобы средства аутентификации, предоставляемые PHP, работали, требуются функции управления сеансом (сессии). Как только один из старых пользователей входит в систему, возникает необходимость восстановить соответствующую информацию о состоянии, используя множественные запросы. Вы можете написать свою собственную библиотеку аутентификации, либо воспользоваться средствами библиотеки PHPLib.

<?php //php432

if(!isset($PHP_AUTH_USER))

{

Header("WWW-Authenticate: Basic realm=\"My Realm\"");

Header("HTTP/1.0 401 Unauthorized");

echo "Сообщение посылаемое пользователю при нажатии кнопки Cancel \n";

exit; }

else

{

echo "Привет $PHP_AUTH_USER.<P>";

echo "Вы ввели $PHP_AUTH_PW , что случайно совпадает с Вашим паролем.<P>";

}

?>

При разработке приложения внимательно изучите все места, где пользовательская ошибка может вскрыть брешь в безопасности. Перечислим наиболее распространённые "дыры", позволяющие искажать данные:

Системные вызовы. Каждый раз нужно убедиться, сто пользователь отправляет вам "безопасные" данные для системного вызова. НИКОГДА НЕ ДОВЕРЯЙТЕ ДАННЫМ, ПОЛУЧЕННЫМ ОТ ПОЛЬЗОВАТЕЛЯ. И ПРЕЖДЕ ЧЕМ ПОДСТАВИТЬ ИХ В СИСТЕМНЫЙ ВЫЗОВ ПРОВЕРЬТЕ ИХ.

Регистрация пользователей. Если вы желаете получить корректные результаты, обзательно проверяйте полученные данные, причём, лучше если проверка будет состоять из нескольких этапов. Прежде всего, это проверка адреса электронной почты: убедитесь, что пользователь предоставил вам работающий аккаунт. Кроме того, стоит убедиться, что указанный возраст находится в определённых пределах.

Приём номеров кредитных карточек. Некоторые программисты ограничиваются самыми простыми алгоритмами; их легко обмануть. Существуют крупные специализированные организации для проверки кредитных карточек; рекомендуем прибегать к их помощи или ресурсам и только потом решать, принята карточка или нет. НИКОГДА НЕ ПОЛАГАЙТЕСЬ ТОЛЬКО НА АЛГОРИТМЫ.

Безопасность системных вызовов.

Если возникает необходимость поместить полученные от пользователя данные в системный вызов, обязательно проверьте и перепроверьте их. Убедитесь, что данные, которые пользователь предоставил системе, не содержат "опасных" элементов и не взломают систему нежелательными командами. Для этого PHP предлагает специальную функцию EscapeShellCmd().

Каждый раз при системном вызове с потенциально небезопасными данными, дезактивируйте их с помощью EscapeShellCmd():

Примечание: дезактивация проходит путём подстановки бэкслэша ("\") перед потенциально небезопасными для системы символами (а именно: #&;?'\"|*?~<>^()[]{}$\\\x0A\xFF).

<html>

<head>

<title>Поиск аккаунта</title>

</head>

<body>

<h1>Поиск аккаунта</h1>

<?php

if ($name) {

system (EscapeShellCmd ("lookup $name"));

print "<br>\n\n";

}

?>

<form action="<?php print $PHP_SELF; ?>" method="GET">

Введите аккаунт для поиска:

<input type="text" name="name">

<input type="submit" value="Найти аккаунт">

</form>

</body>

</html>

Примечание: хотя EscapeShellCmd() - функция чрезвычайно полезная, когда вам нужно убедиться в безопасности полученных данных, всегда стоит проводить специальные проверки в зависимости от вида данных. EscapeShellCmd() не проверит данные на корректность, она лишь предотвратит неавторизованные действия пользователя.

Усиленная проверка данных

Как правило, лучше проверять строку на наличие допустимых символов, нежели на отсутствие недопустимых. Например, проверить, что переменная $name содержит только буквенные символы. При этом новые пути проникновения в систему имеют меньше шансов просочиться через ваш фильтр.

Проверка адресов электронной почты

Один из самых распространённых видов проверки данных - это валидация адреса электронной почты. Большинство новичков ограничиваются лишь фильтром из регулярных выражений, взятым с какого-нибудь кладбища бесплатных скриптов. Но одних регулярных выражений недостаточно, если вы претендуете на получение действительно корректных результатов. Для большей безопасности вы можете применить ещё парочку методов:

проверка соединения

интерактивная проверка

Проверка соединения

Один из способов проверки аккаунта на достоверность без привлечения самого пользователя – это попробовать открыть соединение с сервером, указанным в полученном адресе и проверить наличие аккаунта на данном сервере. Данный метод работает медленнее, чем регулярные выражения. Почтовый сервер пользователя может временно не работать, при этом рабочий адрес будет восприниматься как некорректный.

Интерактивная проверка

Другой способ проверки - выслать на указанный адрес специальный ключ и попросить пользователя ввести этот ключ, чтобы продолжить процедуру регистрации. Данный метод позволяет проверить не только существование адреса, но и наличие у пользователя права доступа к нему.

Как и любой другой, этот способ не даёт стопроцентной гарантии надёжности. Пользователь может создать временный аккаунт, а потом дать его при регистрации.

Приложение 6. Скрипты и шаблоны

Соседние файлы в папке example1