[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Доработка гостевой книги
Sopromatenot
Добрый день. Я написал на сайт гостевую книгу использующая в качестве БД текстовый фаил.

Выглядит это так:

user posted image

Пользователь заходит на guestbook.php где происходит формирование формы отправки сообщения и вывод сообщений из файла messages.txt


<?php
session_start();
session_register("secret_number");
$_SESSION["secret_number"] = rand(1000,9999);
?>

......

<
form name="gbook" .... method="post" action=.......>
.....
<
td class="nameformtext"><input type="text" name="username" /></td>
......
<
td class="messageformtext"><textarea name="message" rows="6" cols="37"></textarea></td>
......
<
td class="capform"><img src="captcha.php" /></td>
<
td class="captext"><input type="text" name="secretcode" value="" /></td>
......
<
td class="butform"><input type="submit" name="send" value="Добавить сообщение" /></td>
.......
<
input type="hidden" name="urlm" value=<?php echo $urlmain?> /> - это ссылка куда надо вернуться....
<
input type="hidden" name="deliter" value=<?php echo $delitmer?> /> - это разделитель данных в файле
</form>

......


выводим из файла сообщения
<?php
$data = @file($filename);
foreach($data as $val)
{
list($username, $message, $date) = explode($delitmer, trim($val));
$tmp_message = str_replace("%username%", $username, $shablon);
$tmp_message = str_replace("%message%", $message, $tmp_message);
$tmp_message = str_replace("%add_date%", $date, $tmp_message);
echo $tmp_message;
}
?>


Далее идёт отправка методом POST скрипту gbook_add.php где выполняется:


<?php
session_start();
......

$sk = $_SESSION['secret_number'];
.....

if($code != $sk) {
выдаём что капча не верна и выходим
exit;
}

if (isset($_POST))
{
if (isset($_POST['username']) & isset($_POST['message']))
{
if (((strlen($_POST['username'])>0) & (strlen($_POST['username'])<=$username_limit)) &
((
strlen($_POST['message'])>0) & (strlen($_POST['message'])<=$message_limit)))
{
$username = str_replace("\r\n", "<br />", htmlspecialchars($_POST['username']));
$message = str_replace("\r\n", "<br />", htmlspecialchars($_POST['message']));
$arr = array($username, $message, date('Y.m.d [H:i:s]'), $_SERVER["REMOTE_ADDR"]);
$new_message = implode($delitmer, $arr) . "\r\n";
$messages_arr = @file($filename);
$messages_str = $new_message;
$messages_str .= trim(implode("", $messages_arr));
$fp = fopen($filename, "w+");
fwrite($fp, $messages_str);
fclose($fp);
выдаём что сообщение отправили
}
else
{
выдаём ошибку
}
}
}

?>


=============================================

1. Какие права нужно выставить на файлы чтоб это всё работало, но фаил messages.txt нельзя было просмотреть тупо введя его url в адрессной строке браузера?

2. htmlspecialchars даст необходимую фильтрацию данных?

3. Как защитить gbook_add.php от F5? Пока я думаю просто удалить из сессии переменую капчи и тогда повторая отправка выдаст ошибку.

4. Замечанию по коду приветствуюца...

Спасибо.



Спустя 9 минут, 3 секунды (22.01.2011 - 23:16) alex12060 написал(а):
Цитата
1. Какие права нужно выставить на файлы чтоб это всё работало, но фаил messages.txt нельзя было просмотреть тупо введя его url в адрессной строке браузера?


$chmod = chmod('messages.txt', 0620);


Цитата
2. htmlspecialchars даст необходимую фильтрацию данных?


Для текстого БД не опасно, но есл не фильтровать, то можно напускать туда фигни всякой

Цитата
3. Как защитить gbook_add.php от F5? Пока я думаю просто удалить из сессии переменую капчи и тогда повторая отправка выдаст ошибку.



header("Location: index.php");


Цитата
4. Замечанию по коду приветствуюца...


Не вникал пока)

Спустя 1 минута, 59 секунд (22.01.2011 - 23:18) alex12060 написал(а):
Рекомендую делать unset() для переменных для оптимизации.

Спустя 1 минута, 28 секунд (22.01.2011 - 23:20) Invis1ble написал(а):
Цитата
1. Какие права нужно выставить на файлы чтоб это всё работало, но фаил messages.txt нельзя было просмотреть тупо введя его url в адрессной строке браузера?

в директорию с фалом положи .htaccess
Deny from all

Цитата
2. htmlspecialchars даст необходимую фильтрацию данных?

эту ф-цию юзают на выходе
Цитата
3. Как защитить gbook_add.php от F5? Пока я думаю просто удалить из сессии переменую капчи и тогда повторая отправка выдаст ошибку

если ты о дублировании сообщений - то юзай редирект
Цитата
4. Замечанию по коду приветствуюца...

я не заглядывал в код :)

Спустя 2 минуты, 49 секунд (22.01.2011 - 23:23) alex12060 написал(а):
Invis1ble

Почти одно и то же написали biggrin.gif

Спустя 3 минуты, 7 секунд (22.01.2011 - 23:26) Invis1ble написал(а):
alex12060
да, есть немного smile.gif

Спустя 50 минут, 32 секунды (23.01.2011 - 00:16) twin написал(а):
Цитата
Для текстого БД не опасно, но есл не фильтровать, то можно напускать туда фигни всякой
Причем тут БД? Хоть файловая, хоть настоящая?
Читайте.

Спустя 46 минут, 33 секунды (23.01.2011 - 01:03) Sopromatenot написал(а):
Цитата
$chmod = chmod('messages.txt', 0620);

Если выставить 620 то пользователю дадут права (---).... то-есть никаких и соответственно ни вывести сообщения, ни записать в файл он не сможет.

Цитата
Для текстого БД не опасно, но есл не фильтровать, то можно напускать туда фигни всякой

Если не фильтровать, то каждый сможет дописать страницу на свой "вкус"

Цитата
header("Location: index.php");

Цитата
если ты о дублировании сообщений - то юзай редирект

выполнил session_destroy после удачного отправления и проблема решилась ибо код капчи удаляется и сверка даёт false smile.gif

Цитата
в директорию с фалом положи .htaccess

Спасибо, вот это помогло smile.gif

Цитата
Причем тут БД? Хоть файловая, хоть настоящая?
Читайте.

Спасибо! Мне теперь есть к чему стремить 2-ую версию своей гостевой smile.gif
Как раз там рассматриваются интересующие меня вопросы happy.gif

Спустя 1 час, 47 минут, 45 секунд (23.01.2011 - 02:51) Админ написал(а):
wr-guestbook - копай гугл - она тоже на файлах - думаю что там есть ответ на все твои вопросы

Спустя 5 дней, 17 часов, 55 минут, 52 секунды (28.01.2011 - 20:46) Sopromatenot написал(а):
Цитата (Админ @ 22.01.2011 - 23:51)
wr-guestbook - копай гугл - она тоже на файлах - думаю что там есть ответ на все твои вопросы

Цитата
wr-guestbook - копай гугл - она тоже на файлах - думаю что там есть ответ на все твои вопросы

Спасибо, но там уж слишком накрутили.... долгно буду ковыряться.

Цитата
Причем тут БД? Хоть файловая, хоть настоящая?
Читайте.


Вот такой вопросик: как сделать вывод записей из файла "задом на перёд"?

на данный момент так:

[Форма]
---------------
1 сообщение
---------------
2 сообщение
---------------
3 сообщение

А мне нужно так:

[Форма]
---------------
3 сообщение
---------------
2 сообщение
---------------
1 сообщение

Тобишь чтоб последнее добавленное сообщение было наверху.


Спустя 21 час, 24 минуты, 35 секунд (29.01.2011 - 18:11) Sopromatenot написал(а):
Такс, вроде всё сделал уже cool.gif

Получилось так: http://lol4to.ru/guestbook.php

Теперь пару вопросов:
1. Мне не нравится что htmlspecialchars ставит слеши перед кавычками. Есть функция которая просто заменит на эквивалент кавычки и не будет ставить слеши?

Спустя 6 минут, 54 секунды (29.01.2011 - 18:18) inpost написал(а):
Sopromatenot
А почему ты решил, что htmlspecialchars ставит кавычки? Может их поставили магические кавычки?

Спустя 18 минут, 47 секунд (29.01.2011 - 18:37) Sopromatenot написал(а):
хех, а я всегда думал что это дело рук функции фильтра ))

php_flag magic_quotes_gpc Off - судя по всему нужно это дописать в фаил настроек....

Как нибудь на безопасность для сабжа это может сказаться?

Спустя 1 час, 24 минуты, 10 секунд (29.01.2011 - 20:01) Invis1ble написал(а):
Sopromatenot
Цитата
Как нибудь на безопасность для сабжа это может сказаться?

да, например в SQL-запросах нужно юзать mysql_real_escape_string()

Спустя 3 минуты, 44 секунды (29.01.2011 - 20:05) inpost написал(а):
Частично.
Внутри скрипта проверку делай на то, включены ли кавычки, и если да - убирай их.

Спустя 3 часа, 16 минут, 19 секунд (29.01.2011 - 23:21) alex12060 написал(а):
Цитата
Если выставить 620 то пользователю дадут права (---).... то-есть никаких и соответственно ни вывести сообщения, ни записать в файл он не сможет.


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

Спустя 1 день, 1 час, 38 минут, 34 секунды (31.01.2011 - 00:59) Sopromatenot написал(а):
Цитата (alex12060 @ 29.01.2011 - 20:21)
Какому пользователю?
Отчасти ты прав - гостям на серваке писать нельзя будет, в файл можно только писать серваку, но вывести извне не сможет, а тебе - создателю, туда можно и писать и читать его.

Когда посетитель заходит на сайт, то он причисляется к группе "other".... 620 означает что группе other дадут права 0, а надо дать 6 или 7 для того чтоб можно было читать фаил и записывать в него. С этим я уже давно разобрался... я выставил 6 и залил .htaccess с запретом просмотра smile.gif

Всем спасибо, на томже сайте нашлась статья по поводу безопасности сабжевой гостевухи...
http://irbis-team.com/15/18 cool.gif

Всем спасибо, на данный момент большинство вопросов решил )
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.