За последние 24 часа нас посетили 22454 программиста и 1142 робота. Сейчас ищут 677 программистов ...

как случайно не удалить записи из БД [алгоритмы]

Тема в разделе "Решения, алгоритмы", создана пользователем Koc, 16 июл 2008.

  1. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Код (Text):
    1. наилучший вариант:
    2. 1) переименовать admin.php
    3. 2) передавать данные методом POST
    4. 3) дополнительно передавать hidden-поле, в котором хранилось бы что-то типа md5(id_удаляемой_записи."секретная строка, одному одмину ведомая"). При обработке формы, на сервере этот хеш проверять.
     
  2. Anonymous

    Anonymous Guest

    Есть одно золотое правило. Запросы ИЗМЕНЯЮЩИЕ данные, должны передаваться ТОЛЬКО методом ПОСТ.

    И нет тех проблем, о которых ты говоришь.
     
  3. Anonymous

    Anonymous Guest

    Если уж так хочется делать это методом GET - берешь хеш от содержимого id=2 и секретной строки, и проверяешь передачу его одним из параметров запроса.
     
  4. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    +1

    p.s. обновление через PUT, удаление через DELETE, а получение через GET :)
     
  5. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    да, идея с хешем понравилась. На ней и остановлюсь пожалуй.
     
  6. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Koc
    * добавить в блок парсинга введенного пользователем текста проверку: ссылки на картинки не должны содержать "?"...
     
  7. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Dagdamor, дурацкое решение. :)

    Koc, фильтруй по:
    Код (Text):
    1. /http:\/\/(www.)?example.com\/admin.php/i
    и
    Код (Text):
    1. /(\/)?admin.php/i
    Увидел, удалил, записал в базу.

    P.S. +47 "миллионов до неба" за POST.
     
  8. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    lexa
    Твое ничем не лучше :D
    Насчет моего, впрочем, согласен - ведь никто не мешает злоумышленнику забабахать редирект через ссылку, которая пройдет любую мыслимую валидацию. Значит, только шифрование запросов и проверка на POST.

    UPD: Поскольку Koc уже добавил мой "вариант" в первое сообщение, распишу подробнее:
    1. На сайт заходит злоумышленник, оставляет в комментах строку "[ img ]http://hacker.com/images/letshackkoc.gif[ /img ]".
    2. На сайт заходит Koc, авторизуется, открывает страницу комментариев.
    3. Браузер делает подзапрос на "картинку" hxxp://hacker.com/images/letshackkoc.gif.
    4. С сервера hacker.com вместо картинки приходит ответ: Location: hxxp://koc.ru/admin.php?do-delete...
     
  9. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    ага, вот как получается. Методом пост передовать не хочу, если только ...
    Есть форма. В ней 2 кнопки submit. Как узнать на какую нажал пользователь? Можно ли это сделать с отключенным JS?
     
  10. NOmeR1

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

    С нами с:
    11 май 2008
    Сообщения:
    97
    Симпатии:
    0
    Код (Text):
    1. <form method="POST">
    2. <input type="submit" name="idiot1" value="Тыц"><br>
    3. <input type="submit" name="idiot2" value="Пыщ">
    4. </form>
    5. <?php
    6.     if(isset($_POST['idiot1'])) {
    7.         echo '<br><br><h1>Тыц</h1>';
    8.     } else if(isset($_POST['idiot2'])) {
    9.         echo '<br><br><h1>Пыщ</h1>';
    10.     }
    11. ?>
     
  11. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    доу, вротмненоги. Спасибо, NOmeR1.
     
  12. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    юзер размещает в комментах ссылку на свой сайт. админ идёт на этот сайт, а там скрытая пост-форма с автосабмитом на сайт админа. удаление благополучно произошло.
     
  13. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    dark-demon
    ну тогда только шифровать md5(id+SALT)
     
  14. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    dark-demon
    +1 :)
    Мне уже начинает нравиться идея с реферером... а если у кого-то не работает - это их проблемы ;)
    Можно, в конце концов, сделать проверку опциональной, а по умолчанию включить.
     
  15. MaXyC_Web_Studio

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

    С нами с:
    31 дек 2006
    Сообщения:
    678
    Симпатии:
    3
    Адрес:
    Новоуральск
    апсолютно ненавижу когда редактирование контента происходит во фронтэнде пользователя. глупо! хоть и удобно как скажут многие! абсолютно всегда, когда писал CMS для различных сайтов, ВСЕГДА отделял админку от фронтэнда.
    А уж что там у меня в админ разделе творится известно только мне)))
     
  16. Anonymous

    Anonymous Guest

    В админку по https ходить.
     
  17. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    кстати, как сделать запрет принимать POST-данные с во всех доменов кроме нашего?
     
  18. Anonymous

    Anonymous Guest

    Проверять домен :) А ПОСТ- данные приходят с домена?
     
  19. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Горбунов Олег
    Разочарую, при открытом HTTPS канале автосабмит прекрасно сработает. Я так авторизуюсь на некоторых сайтах, чтобы руками не вбивать.

    Koc
    Только реферер проверять, муахаха ;)
     
  20. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    ну тогда делать все вместе. Вечером обновлю шапку.
     
  21. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    бугага, на быдлохабре тоже в последнее время начали об этом писать, только проецируют на друпал. Ссылка с хабра привела на http://drupaldance.com/lessons/secure-code-csrf . Собсно тоже самое, что я в 1 сообщении этой темы написал, только не POST+hidden hash а GET+hash
     
  22. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Koc, ты с советами от друпал.ру осторожнее, т.к. 99% населения такие же хорошие программисты, как я балерина.

    Ну, и что за пост без цитаты кого-то из Великих:
    +47 миллионов к мнению этого скромного Алёшки.
     
  23. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    а вот мое мнение по этому вопросу: пост - не решение проблемы. Уже ж писали, что его можно подделать.
    + ну нафига нам городить форму???????77семьсесмь Делать 2 кнопки [Да|Нет], потом обрабатывать их по сраному (isset($_POST['yes'])). Проще же 2 ссылки сделать: да - ?do=delete&id=2&hash=sectrethash нет - на предыдущую страницу или на закрытие модального окна.

    заметил только что:
    а причем тут это? редактирование контента - оно только в бекенде. Но ссылку-то можно поставить и во фронтенде, в комментариях где-нить.
     
  24. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Всюжись было дырой,
    решение одно - быть внимательнее
    ну или на странице удаления, ещё раз спрашивать, "Вы точно хотите удалить?"
     
  25. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    факин щит, мы про это и говорим сейчас. Это и есть потенциальная уязвимость.