Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация на форуме, оцените, посоветуйте что исправить 
:(
    Опции темы
sugee
Дата 22.5.2006, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



Привет всем. Есть у меня одна небольшая просьба.
Вот начал форум писать, закончил вроде систему регистрации-авторизации,  но есть сомнения...
Насколько всё это надёжно, какие есть дыры в безопасности, что нужно исправить или улучшить?

Посмотреть и потестировать можно здесь http://restoran-kaz.ho.com.ua/forum/ 

Исходный код я присоединил, так что сами скрипты я сюда постить не буду, покажу только
структуру БД
Код

use `forum`;

CREATE TABLE `header`
(
  `parent` INT NOT NULL, 
  `author` char(25) NOT NULL,
  `title` char(50) NOT NULL,
  `child` INT DEFAULT 0 NOT NULL,
  `view` INT DEFAULT 0 NOT NULL,
  `area` INT DEFAULT 1 NOT NULL,
  `posted` INT(10) not null,
  `postid` SMALLINT NOT NULL AUTO_INCREMENT, 
   PRIMARY KEY ( `postid` )
);


CREATE TABLE `message`
(
  `postid` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `posted` INT(10) not null,
  `mess` TEXT, 
   PRIMARY KEY ( `postid` ) 
);


CREATE TABLE `members` 
(
  `id` SMALLINT NOT NULL AUTO_INCREMENT,
  `name` varchar(40) NOT NULL,
  `time` INT(14) NOT NULL,
  `securid` TINYTEXT NOT NULL,
  `password` TINYTEXT NOT NULL,
  `messages` INT DEFAULT 0 NOT NULL,   
   PRIMARY KEY ( `id` ) 
);


Для авторизации используется таблица members.

Код я подробно прокомментировал, особо меня интересует вот этот момент
Код

//хэш безопасности который формируется из логина и уникального //времени регистрации  при регистрации он записывается в БД и в //cookie, а при авторизации используется для  извлечения имени //пользователя из БД (имя присваивается переменной сессии)  
//**************************************************************************************
function getsecurid( $user_name , $reg_time )
 {  return sha1( $user_name ) . sha1( $reg_time );  }



Я основывался на алгоритме описанном вот здесь http://vingrad.ru/PHP-PHPSCRIPTS-002849, но насколько эффективно
у меня эта идея реализована?  Я не вводил ограничений на браузер или на IP, но хотел по возможности исключить
возможность подмены куки.



P.S. Естественно дальше всё будет усложняться, поскольку будут разные уровни доступа: админы,  модераторы, обычные пользователи.   

Присоединённый файл ( Кол-во скачиваний: 25 )
Присоединённый файл  forum.rar 9,37 Kb
PM MAIL   Вверх
smartov
Дата 22.5.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Мне кажется что те скрипты что ты выложил не отвечают тем, что реально есть.
Потому что в выложенный есть дырка в авторизации.
На сайте же она не проявляется.

Добавлено @ 18:35 
Или у тебя magic_quotes включены 
PM MAIL   Вверх
smartov
Дата 22.5.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



А не smile
Я просто запрос неверно составлял smile

После правильного пустило под админом smile
Создал тему "В форуме дырка" smile 

mysql_real_escape_string не забывай 
PM MAIL   Вверх
sugee
Дата 22.5.2006, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



smartov,  ладно,  авторизацию мою ты сломал,  может расскажешь где та дырка,  которой ты воспользовался?

Цитата(smartov @  22.5.2006,  18:35 Найти цитируемый пост)
Мне кажется что те скрипты что ты выложил не отвечают тем, что реально есть.

Да нет,  только что самую свежую версию закачал на сервак и её же здесь
выложил.

Добавлено @ 19:04 
Цитата(smartov @  22.5.2006,  18:54 Найти цитируемый пост)
mysql_real_escape_string не забывай  
Только это?
 
PM MAIL   Вверх
smartov
Дата 22.5.2006, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Дырка в запросе на авторизацию, куда ты пихаешь $name предварительно не взяв его в mysql_real...

Цитата(sugee @  22.5.2006,  18:03 Найти цитируемый пост)
Только это?

Да. Этого достаточно чтобы тот mysql-injection (погугли эту тему если интересно) не сработал.  

Это сообщение отредактировал(а) smartov - 22.5.2006, 19:17
PM MAIL   Вверх
sugee
Дата 22.5.2006, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



Так,  это я поправил.   Про mysql_real_escape_string я конечно знал,  но 
не понимал до конца.   Буду разбираться.   
PM MAIL   Вверх
madFobos
Дата 22.5.2006, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: 1
Всего: 3



1. Если posted - это дата, то лучше использовать тип DATETIME или TIMESTAMP вместо INTEGER
2. Все char лучше заменить на varchar (в твоем конкретном случае БД будет меньше места занимать)
3. И совет на будущее, не называй идентификаторы таблиц одинакого (postid), потом запутаешься... Лучше сделай header_id и message_id. Хотя я вобще недопонял в твоей структуре через какую переменную идет связь таблицы header и message (надеюсь не postid)  
PM MAIL   Вверх
sugee
Дата 22.5.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



Цитата(madFobos @  22.5.2006,  21:14 Найти цитируемый пост)
я вобще недопонял в твоей структуре через какую переменную идет связь таблицы header и message (надеюсь не postid)   

Вообще-то именно через postid.  
Вот так я выбираю сообщение из базы
Код

select  h.`parent`, h.`author`, h.`title`, h.`child`, h.`postid`, 
  h.`posted`, m.`mess`
  from `header` h, `message` m where m.`postid`=' ".$CurrentId." ' and h.`postid`=' ".$CurrentId." '

Причём хотя это поле я первоначально задумывал как AUTO_INCREMENT (оно и сейчас AUTO_INCREMENT),  но я в него вставляю предварительно
вычисленное значение,  которое не совпадает ни с одним из уже существующих postid.  Абсурд конечно,  но работает.  Я просто не придумал другого способа связать header и message.   Так что AUTO_INCREMENT у поля postid можно смело убрать, он не нужен  но вроде и не мешает.


 
Цитата(madFobos @  22.5.2006,  21:14 Найти цитируемый пост)
Если posted - это дата, то лучше использовать тип DATETIME или TIMESTAMP вместо INTEGER

Я  как-то уже привык хранить TIMESTAMP в поле типа INT. 
PM MAIL   Вверх
-=Ustas=-
Дата 22.5.2006, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(sugee @  22.5.2006,  22:19 Найти цитируемый пост)
Я  как-то уже привык хранить TIMESTAMP в поле типа INT.  

И правильно делаешь ;) 


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
smartov
Дата 23.5.2006, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



sugee, 
p.s. Не знаю обращал ли кто твое внимание, но у тебя код практически нечитаемый из-за отсутствия форматирования.
Потом сам же не сможешь прочитать.
Очень советую почитать вот это: http://pear.php.net/manual/en/standards.php
(пройди по всем ссылкам)
Эти стандарты форматирования можно сказать классические. 
PM MAIL   Вверх
sugee
Дата 23.5.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



А я,  между прочим,  на этот раз старался уделять внимание форматированию.   Значит недостаточно.  Хорошо,  почитаю стандарты -  пройдусь по коду ещё раз.


Цитата(smartov @  22.5.2006,  19:16 Найти цитируемый пост)
достаточно чтобы тот mysql-injection (погугли эту тему если интересно) не сработал

Нагуглил интересный факт, оказывается mysql_escape_string и mysql_real_escape_string не экранируют '%' и '_'.   
В SQL это любая строка и любой одиночный символ.
 
PM MAIL   Вверх
smartov
Дата 23.5.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Цитата(sugee @  23.5.2006,  10:15 Найти цитируемый пост)
Нагуглил интересный факт, оказывается mysql_escape_string и mysql_real_escape_string не экранируют '%' и '_'.   
В SQL это любая строка и любой одиночный символ.

На твою систему аторизации это никак не повлияет 
PM MAIL   Вверх
madFobos
Дата 24.5.2006, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: 1
Всего: 3



Цитата(sugee @  22.5.2006,  22:19 Найти цитируемый пост)
Причём хотя это поле я первоначально задумывал как AUTO_INCREMENT (оно и сейчас AUTO_INCREMENT),  но я в него вставляю предварительно
вычисленное значение,  которое не совпадает ни с одним из уже существующих postid.  Абсурд конечно,  но работает.  Я просто не придумал другого способа связать header и message.   Так что AUTO_INCREMENT у поля postid можно смело убрать, он не нужен  но вроде и не мешает.


В таком случае нужно оставлять AUTOINCREMENT только у одной таблицы (в данном случае думаю у header). И не придется делать лишних вычислений (СУБД ведь для этого и создаются, чтобы делать работу за программистов smile.

Цитата(-=Ustas=- @  22.5.2006,  23:11 Найти цитируемый пост)
Я  как-то уже привык хранить TIMESTAMP в поле типа INT.  

И правильно делаешь ;)  


Спорный вопрос, особенно при использовании MySQL ближе к пятому. Там куча функций для работы с датами, которые к типу  INT не применить никак... К тому же При TIMESTAMP можно вобще о дате не забоиться при вставке (и апдейте при желании)...
 
PM MAIL   Вверх
sugee
Дата 24.5.2006, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



Цитата(madFobos @  24.5.2006,  21:06 Найти цитируемый пост)
В таком случае нужно оставлять AUTOINCREMENT только у одной таблицы 
 smile 
Блин точно ведь,  как я сам не додумался! 
А не додумался,  потому что забыл о существовании функции mysql_insert_id().  

А я смотри что делал 
Код

function NewPostid() 
{
//выбираем postid всех уже существующих постов
$post_exists_query = mysql_query("select `postid` from `header`");
 
 //создаём массив всех существующих postid
   $post_exists_array = array();
  while($post_exist = mysql_fetch_assoc($post_exists_query)) { 

     $post_exists_array[] = $post_exist['postid'];
     
  }

  if(count($post_exists_array) !== 0)  {
//находим максимальный номер поста
     $MaxPostid = max($post_exists_array);

//задаём postid добавляемого поста 
     $NextPostid = ++$MaxPostid;
}  
  else
    {  $NextPostid = 1;  }

       return $NextPostid;
}
 smile 
  

Это сообщение отредактировал(а) sugee - 24.5.2006, 22:38
PM MAIL   Вверх
sugee
Дата 24.5.2006, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



Цитата(sugee @  24.5.2006,  22:37 Найти цитируемый пост)
А я смотри что делал 

К тому же у меня могла бы получиться коллизия, в случае если бы два
юзера одновременно добавили сообщение.
Могли бы получиться два поста с одинаковым postid.
Хотя поскольку поля postid всё-таки AUTO_INCREMENT, мускул 
не пропустил бы два одинаковых значения. Один из одновременно выполняющихся  инсертов просто бы не прошёл.

 
PM MAIL   Вверх
madFobos
Дата 25.5.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: 1
Всего: 3



Цитата(sugee @  24.5.2006,  23:10 Найти цитируемый пост)
К тому же у меня могла бы получиться коллизия, в случае если бы два
юзера одновременно добавили сообщение.
Могли бы получиться два поста с одинаковым postid.
Хотя поскольку поля postid всё-таки AUTO_INCREMENT, мускул 
не пропустил бы два одинаковых значения. Один из одновременно выполняющихся  инсертов просто бы не прошёл.


Для этого, кстати, существует такая вещь как LOCK TABLE..., а INNODB кажется вобще автоматом блокируют таблицы.
 
PM MAIL   Вверх
sugee
Дата 27.5.2006, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



Цитата(madFobos @  24.5.2006,  21:06 Найти цитируемый пост)
В таком случае нужно оставлять AUTOINCREMENT только у одной таблицы

убрал AUTO_INCREMENT в таблице message.
Вставку теперь делаю так
Код

 mysql_query("insert into `header` values(
                                           '".$parent."', 
                                           '".$author."', 
                                           '".$title."', 
                                           '',
                                           '', 
                                           '".$area."', 
                                           '".$posted."',
                                           '' ) 
                                         ");

 $CurrentPostid = mysql_insert_id ();

 mysql_query("insert into `message` values(
                                            '".$CurrentPostid."',
                                            '".$posted."',
                                            '".$mess."' )
                                         ");


Функционально, конечно, ничего не изменилось, просто раньше я делал
это через ж...      ИМХО не всё равно, каким способом ты добиваешься своей цели, особенно  если выкладываешь код на всеобщее обозрение.
В общем спасибо, что открыл мне глаза на очевидную вещь 
PM MAIL   Вверх
sugee
Дата 27.5.2006, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



Пора писать админку...  Админку то я напишу, но в связи с этим возникает  один очень важный вопрос. 
Как наилучшим образом (с точки зрения безопасности, естественно) организовать  доступ у ней? 
В БД, в таблице members я добавил поле status, в котором могут быть три значения:  'us' - пользователь, 'adm' - админ и 'moder' - модератор.
Любой кто зарегистрировался на форуме естественно получает статус `us`.
Вопрос в том, каким образом должен осуществляться доступ к интерфейсу администрирования для пользователя у которого в поле `status` записано 'adm'.

Можно конечно в общей для всех функции авторизации проверять статус, и если  статус админ, то выводить ссылку для входа в админку.
При этом если админка будет поключаться через index.php, то доступ будет осуществлятся  через GET, что мне явно не подходит. 
Если же это будет ссылка на отдельный скрипт,    то тот кто каким-то образом узнал его адрес, сможет зайти без всякого пароля.
На этот случай при входе в админку ещё раз проверяем имя записанное в сессии,    и смотрим действительно ли у человека с таким ником статус админа.
В общем вот что я хотел спросить,  мне остановиться на последнем варианте, или   есть идеи получше? 
PM MAIL   Вверх
madFobos
Дата 28.5.2006, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: 1
Всего: 3



А чем тебя не устраивает доступ через GET? Вобще доступ к любой разделу сайта лучше делать через одну страницу (типа index.php). Далее ты можешь создать папку типа admin с админкой и делать запрос типа

http://site.ru?mod=a&action=some

В index.php проверяешь соответственно его на существовине как-то так

Код

if ($_GET['mod'] == 'a' && file_exists(SITE_DIR.'/admin') && $_SESSION['user']['status'] == 'adm')
{
  include(SITE_DIR.'/admin/'.$_GET['action'].'php');
}
else
{
  die('Hey, go out from here! :)))');
}


Еще более навороченный вариант, ты можешь создать таблицу типа rights и указать права на все папки, а через index.php соответсвенно грузить их только по правам.

И если тебе не нравится вариант http://site.ru?mod=a&action=some, используй mod_rewrite и можешь получить нечто вроде http://site.ru/mod/a/action/some.html 

З.Ы. Ну и самое простое ты можешь создать папку admin и тупо запаролить ее с помощью .htaccess, но это не лучший вариант, т.к. динамика при этом сильно теряется. 

Это сообщение отредактировал(а) madFobos - 28.5.2006, 02:08
PM MAIL   Вверх
sugee
Дата 28.5.2006, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



Цитата(madFobos @  28.5.2006,  02:06 Найти цитируемый пост)
А чем тебя не устраивает доступ через GET?
Так ведь весь путь к закрытому разделу в адресной строке отображается.   
Авторизация на главной странице форума у меня производится по куке,
по этому в данном случае доверять только ей нельзя.   
Поэтому после перехода по ссылке админ должен будет как обычно ввести свой логин-пароль.  Вобщем, так буду делать.
 
PM MAIL   Вверх
sugee
Дата 28.5.2006, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



Послушайте друзья,  а как обычно выглядит админка на форуме, я никогда не видел  smile 
Можно конечно сделать для администрирования отдельный интерфейс, где так же как обычно просматриваются темы, но напротив каждого поста стоят  кнопочки "удалить", "редактировать" и т.д.  Тогда в админке придётся продублировать все функции вывода.

Но мне представляется заманчивой такая картина.  Админ заходит на форум.   Поскольку его статус 'adm', под приветствием  наверху страницы появляется ссылка  "Администрирование".  Перейдя по этой ссылке он попадает на страницу для ввода  логина и пароля администратора, чтобы подтвердить что он действительно
администратор.

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

То есть отдельного админского интерфейса не будет, просто пользователь  с более высоким статусом будет иметь в распоряжении дополнительные кнопки.
Как вам такой вариант?  

Это сообщение отредактировал(а) sugee - 29.5.2006, 00:15
PM MAIL   Вверх
madFobos
Дата 29.5.2006, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: 1
Всего: 3



Цитата(sugee @  28.5.2006,  10:00 Найти цитируемый пост)
Так ведь весь путь к закрытому разделу в адресной строке отображается.   
Авторизация на главной странице форума у меня производится по куке,


В том-то и дело, что раздел закрытый и даже если ты его знаешь без авторизации все-равно не попадешь (если ты не кул-хацкер конечно smile. 

Цитата(sugee @  28.5.2006,  15:59 Найти цитируемый пост)
То есть отдельного админского интерфейса не будет, просто пользователь  с более высоким статусом будет иметь в распоряжении дополнительные кнопки.
Как вам такой вариант?  


Непонятно только зачем ссылка "Администратирование". Вошел под админом, показывается твой статус и все. Вобще непонятно, зачем повторно вводить логин и пароль? Как это безопасность-то повысит? 
PM MAIL   Вверх
sugee
Дата 29.5.2006, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: 1
Всего: 4



Цитата(madFobos @  29.5.2006,  10:21 Найти цитируемый пост)
Вобще непонятно, зачем повторно вводить логин и пароль?
Нет,  пароль вводится один раз. Когда человек(с любым статусом) заходит на сайт его сначала узнают по куке.  
В куке содержится такая вещь
Цитата(sugee @  22.5.2006,  17:52 Найти цитируемый пост)

//хэш безопасности который формируется из логина и уникального //времени регистрации  при регистрации он записывается в БД и в //cookie, а при авторизации используется для  извлечения имени //пользователя из БД (имя присваивается переменной сессии)  


Для того чтобы простой пользователь был авторизован этого достаточно.
Но админ обязательно должен ввести пароль,  поскольку с его компа может зайти и кто-то другой.
 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0736 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.