Выглядит это так:
Пользователь заходит на 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
Почти одно и то же написали
Почти одно и то же написали
Спустя 3 минуты, 7 секунд (22.01.2011 - 23:26) Invis1ble написал(а):
alex12060
да, есть немного
да, есть немного
Спустя 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
Цитата |
в директорию с фалом положи .htaccess |
Спасибо, вот это помогло
Цитата |
Причем тут БД? Хоть файловая, хоть настоящая? Читайте. |
Спасибо! Мне теперь есть к чему стремить 2-ую версию своей гостевой
Как раз там рассматриваются интересующие меня вопросы
Спустя 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 написал(а):
Такс, вроде всё сделал уже
Получилось так: http://lol4to.ru/guestbook.php
Теперь пару вопросов:
1. Мне не нравится что htmlspecialchars ставит слеши перед кавычками. Есть функция которая просто заменит на эквивалент кавычки и не будет ставить слеши?
Получилось так: http://lol4to.ru/guestbook.php
Теперь пару вопросов:
1. Мне не нравится что htmlspecialchars ставит слеши перед кавычками. Есть функция которая просто заменит на эквивалент кавычки и не будет ставить слеши?
Спустя 6 минут, 54 секунды (29.01.2011 - 18:18) inpost написал(а):
Sopromatenot
А почему ты решил, что htmlspecialchars ставит кавычки? Может их поставили магические кавычки?
А почему ты решил, что htmlspecialchars ставит кавычки? Может их поставили магические кавычки?
Спустя 18 минут, 47 секунд (29.01.2011 - 18:37) Sopromatenot написал(а):
хех, а я всегда думал что это дело рук функции фильтра ))
php_flag magic_quotes_gpc Off - судя по всему нужно это дописать в фаил настроек....
Как нибудь на безопасность для сабжа это может сказаться?
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 с запретом просмотра
Всем спасибо, на томже сайте нашлась статья по поводу безопасности сабжевой гостевухи...
http://irbis-team.com/15/18
Всем спасибо, на данный момент большинство вопросов решил )