Вот написал свою первую гостевую книгу www.zip] (обновил ссылку 3) Зацените Хотел еще сделать демо, но не нашел бесплатного хостинга upd: демо
Хорошо что не нашел Скрипт содержит кучу всяких недочетов если можно так выразиться, и так по порядку Первое что не понравилось это то что ты при написании скрипта,как я понимаю, отключил notice сообщения. У меня они включены я очень огорчился этому У тебя много Undefined index ... Второе, почему то ты не эскейпишь данные в админке. Это очень не хорошо, но хотя бы ты забыл очистить их в админке ... Третье что очень, очень плохо это то что у тебя XSS уязвимость, так что твой скрипт взломают за 5 минут. Я сумел найти и воспользоваться за 2 минуты Не забывай очищать все данные, хоть многие почему то считают XSS не опасным, но используя XSS можно легко получить COOKIE админа ... Так что за скрипт тебе двойка. исправляй
Спасибо за подробную критику! 1. Нотисы включил, от ошибок избавился 2. простые XSS вроде убрал. Фильтрую поля имя и емаил от всего что не "буквы". Поле комментария обрабатываю htmlspecialchars. Этого достаточно? 3. Эскейпить данные в админке значит перед выводом обработать mysql_real_escape_string ? - обработал. вот улучшенная версия www.zip буду рад любым советам как улучшить код.
По быстрому посмотрел, все равно ошибки Хоть ты и почистил в index.php, но в админке опять есть Undefined index ... Почему то ты убрал mysql_real_escape_string у комментариев, добавь эту же ф-ю и в админке. Ну а эту строчку if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$user_name)) ты отсюда взял http://phpclub.ru/detail/article/2003-12-01?
ой, в админке не включил отображение ошибок. исправил. mysql_real_escape_string имеет смысл использовать только для вывода информации или при записи в базу ее тоже лучше использовать? Точный адрес может и не такой, не помню, но статья именно эта была честно, не понимаю что эта строка значит. а что, там уязвимость есть?
mysql_real_escape_string имеет смысл использовать только при записи в б.д. При выводе из б.д. в браузер - htmlspecialchars().
Имеет смысл и даже большой при записи в базу, почитай любую книгу или у гугла спроси. На сколько уязвим этот код сказать сложно... Просто стало интересно откуда взял
Вот теперь понятно. Я не в ту сторону подумал Теперь все записываю заэскепенное; Эта статья раскопирована по инету миллионным тиражом
Только хотел сделать что бы новые/последние в таблице записи выводились первыми/в начале. И заметил что уже само сделалось. Почитал код, не могу понять почему вывод идет от конца базы. Подскажите! Это код админки (он кароче) в самой гостевой такой же вывод: Код (PHP): <?php error_reporting(E_ALL); include "head.html"; include "connect.php"; if (isset($_POST['ids'])) { if (isset($_POST['delete'])) { $i == 0; foreach($_POST['ids'] as $id) { $id = (int)$id; $ath = mysql_query("DELETE FROM $db_table WHERE id = $id"); $i ++; } } if (isset($_POST['public'])) { foreach($_POST['ids'] as $id) { $id = (int)$id; $ath = mysql_query("UPDATE $db_table SET visible = 1 WHERE id = $id"); } } } $ath = mysql_query("SELECT * FROM $db_table;"); if($ath) { ?> <form action="admin.php" method="post"> <table align="center" border="1" width="940"> <tr> <td width="40" align="center"><strong>M</strong></td> <td align="center"><strong>Доступ</strong></td> <td width="80" align="center"><strong>Дата</strong></td> <td><strong>Имя пользователя</strong></td> <td><strong>Эл. адрес</strong></td> <td><strong>Комментарий</strong></td> </tr> <?php while($content = mysql_fetch_array($ath)) { $visible = "<span class=\"label label-warning\">Скрыт</span>"; if($content['visible'] == 1) $visible = "<span class=\"label label-success\">Виден</span>"; ?> <tr> <td width="40" align="center"><input type="checkbox" name="ids[]" value="<?=$content['id']?>"></td> <td align="center"><?= $visible?></td> <td width="80" align="center"><?= $content['data']?></td> <td><strong><?= htmlspecialchars($content['user_name'])?></strong></td> <td><?= htmlspecialchars($content['user_email'])?></td> <td><?= htmlspecialchars($content['user_comment'])?></td> </tr> <?php } ?> </table> <table align="center" width="800"><tr><td align="center"> <br> <input class="btn btn-danger" name="delete" type="submit" value="Удалить отмеченные"> <input class="btn btn-primary" name="public" type="submit" value="Опубликовать отмеченные"> </td></tr></table> </form> <?php } include "footer.html"; ?>