За последние 24 часа нас посетили 18252 программиста и 1642 робота. Сейчас ищут 1476 программистов ...

Гостевая книга

Тема в разделе "Решения, алгоритмы", создана пользователем amohax, 31 мар 2012.

  1. amohax

    amohax Активный пользователь

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    Вот написал свою первую гостевую книгу www.zip] (обновил ссылку 3)
    Зацените :)

    Хотел еще сделать демо, но не нашел бесплатного хостинга :)
    upd: демо
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    а искал?
     
  3. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Хорошо что не нашел :)

    Скрипт содержит кучу всяких недочетов если можно так выразиться, и так по порядку

    Первое что не понравилось это то что ты при написании скрипта,как я понимаю, отключил notice сообщения.
    У меня они включены я очень огорчился этому :)
    У тебя много Undefined index ...

    Второе, почему то ты не эскейпишь данные в админке. Это очень не хорошо, но хотя бы ты забыл очистить их в админке ...

    Третье что очень, очень плохо это то что у тебя XSS уязвимость, так что твой скрипт взломают за 5 минут.
    Я сумел найти и воспользоваться за 2 минуты :)

    Не забывай очищать все данные, хоть многие почему то считают XSS не опасным, но используя XSS можно легко получить COOKIE админа ...

    Так что за скрипт тебе двойка. исправляй :)
     
  4. amohax

    amohax Активный пользователь

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    Спасибо за подробную критику!

    1. Нотисы включил, от ошибок избавился
    2. простые XSS вроде убрал. Фильтрую поля имя и емаил от всего что не "буквы". Поле комментария обрабатываю htmlspecialchars. Этого достаточно?

    3. Эскейпить данные в админке значит перед выводом обработать mysql_real_escape_string ? - обработал.

    вот улучшенная версия www.zip буду рад любым советам как улучшить код.
     
  5. amohax

    amohax Активный пользователь

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    Добавил демо :)
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    По быстрому посмотрел, все равно ошибки :)

    Хоть ты и почистил в 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?
     
  7. amohax

    amohax Активный пользователь

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    ой, в админке не включил отображение ошибок. исправил.
    mysql_real_escape_string имеет смысл использовать только для вывода информации или при записи в базу ее тоже лучше использовать?

    Точный адрес может и не такой, не помню, но статья именно эта была :) честно, не понимаю что эта строка значит. а что, там уязвимость есть?
     
  8. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    mysql_real_escape_string имеет смысл использовать только при записи в б.д.
    При выводе из б.д. в браузер - htmlspecialchars().
     
  9. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Имеет смысл и даже большой при записи в базу, почитай любую книгу или у гугла спроси.

    На сколько уязвим этот код сказать сложно...
    Просто стало интересно откуда взял :)
     
  10. amohax

    amohax Активный пользователь

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    Вот теперь понятно. Я не в ту сторону подумал :) Теперь все записываю заэскепенное;
    Эта статья раскопирована по инету миллионным тиражом :)
     
  11. amohax

    amohax Активный пользователь

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    Только хотел сделать что бы новые/последние в таблице записи выводились первыми/в начале. И заметил что уже само сделалось. Почитал код, не могу понять почему вывод идет от конца базы. Подскажите!

    Это код админки (он кароче) в самой гостевой такой же вывод:
    Код (PHP):
    1. <?php
    2. include "head.html";
    3. include "connect.php";
    4.  
    5. if (isset($_POST['ids']))
    6. {
    7.   if (isset($_POST['delete']))
    8.   {
    9.     $i == 0;
    10.     foreach($_POST['ids'] as $id)
    11.     {
    12.       $id = (int)$id;
    13.       $ath = mysql_query("DELETE FROM $db_table WHERE id = $id");
    14.       $i ++;
    15.     }
    16.   }
    17.  
    18.   if (isset($_POST['public']))
    19.   {
    20.     foreach($_POST['ids'] as $id)
    21.     {
    22.       $id = (int)$id;
    23.       $ath = mysql_query("UPDATE $db_table SET visible = 1 WHERE id = $id");
    24.     }  
    25.   }
    26. }
    27. $ath = mysql_query("SELECT * FROM $db_table;");
    28.  
    29. if($ath)
    30. {
    31. ?>
    32.  
    33.  
    34.  
    35.  
    36. <form action="admin.php" method="post">
    37. <table align="center" border="1" width="940">
    38. <tr>
    39. <td width="40" align="center"><strong>M</strong></td>
    40. <td align="center"><strong>Доступ</strong></td>
    41. <td width="80" align="center"><strong>Дата</strong></td>
    42. <td><strong>Имя пользователя</strong></td>
    43. <td><strong>Эл. адрес</strong></td>
    44. <td><strong>Комментарий</strong></td>
    45. </tr>
    46.  
    47. <?php
    48.   while($content = mysql_fetch_array($ath))
    49.   {
    50.     $visible = "<span class=\"label label-warning\">Скрыт</span>";
    51.     if($content['visible'] == 1) $visible = "<span class=\"label label-success\">Виден</span>";
    52. ?>
    53.  
    54. <tr>
    55. <td width="40" align="center"><input type="checkbox" name="ids[]" value="<?=$content['id']?>"></td>
    56. <td align="center"><?= $visible?></td>
    57. <td width="80" align="center"><?= $content['data']?></td>
    58. <td><strong><?= htmlspecialchars($content['user_name'])?></strong></td>
    59. <td><?= htmlspecialchars($content['user_email'])?></td>
    60. <td><?= htmlspecialchars($content['user_comment'])?></td>
    61. </tr>
    62.  
    63. <?php
    64.   }
    65. ?>
    66.  
    67. </table>
    68. <table align="center" width="800"><tr><td align="center">
    69. <br>
    70. <input  class="btn btn-danger" name="delete" type="submit" value="Удалить отмеченные">
    71. <input  class="btn btn-primary" name="public" type="submit" value="Опубликовать отмеченные">
    72. </td></tr></table>
    73. </form>
    74.  
    75. <?php
    76. }
    77. include "footer.html";
    78. ?>
     
  12. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    $ath = mysql_query("SELECT * FROM $db_table ORDER BY ASC;");
     
  13. amohax

    amohax Активный пользователь

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    Разве по умолчанию стоит не ASC?
     
  14. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    $ath = mysql_query("SELECT * FROM $db_table ORDER BY data;");
     
  15. amohax

    amohax Активный пользователь

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    Не понял вашего ответа
     
  16. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    если выбирать из таблицы как я написал, сортировка будет идти по дате добавления комментария
     
  17. amohax

    amohax Активный пользователь

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    Да, но вопрос был: почему сейчас мой скрипт выводит записи в обратном порядке?