За последние 24 часа нас посетили 10010 программистов и 439 роботов. Сейчас ищут 129 программистов ...

Защита от подмены при удалении сообщения

Тема в разделе "PHP для новичков", создана пользователем schmidt, 19 июн 2017.

  1. schmidt

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

    С нами с:
    9 сен 2012
    Сообщения:
    13
    Симпатии:
    1
    Например, на кнопке 'удалить сообщение из темы на форуме' у меня:
    onClick="DeleteThemeMessage(<id сообщения>, <id блока, чтобы скрыть его после удаления>);"

    2 эти параметра передаются POST запросом (ajax).
    От второго параметра при необходимости можно легко избавиться.
    Сначала я проверяю группу пользователя из $_SESSION (есть ли у него права на удаление).
    И лишь затем берется POST инфа и делается запрос.

    Меня беспокоит это:
    Любой из этих POST параметров можно подменить и в итоге в теме может удалиться не то сообщение.

    В $_SESSION я могу записать id форума и id темы, где находится пользователь, но записать id сообщения, в котором было нажато 'удалить', похоже нельзя.

    Подскажите пжалст как лучше поступить.
     
  2. TeslaFeo

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

    С нами с:
    9 мар 2016
    Сообщения:
    1.703
    Симпатии:
    415
    у тебя в сессии лежит id пользователя и ты можешь проверить его права.
    ну и не давай права кому попало.
     
  3. schmidt

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

    С нами с:
    9 сен 2012
    Сообщения:
    13
    Симпатии:
    1
    Дело не в этом, да, у него есть права и могу их проверить, но этого недостаточно. Именно этот парень, чьи права я проверил, может подменить id удаляемого сообщения и удалить то, к которому у него не должно быть доступа. Ему конечно придется постараться, чтобы узнать id, но я не хочу этого допустить.
     
  4. _ne_scaju_

    _ne_scaju_ Новичок

    С нами с:
    25 ноя 2016
    Сообщения:
    1.214
    Симпатии:
    54
    @schmidt
    я не пойму как он сможет $_POST обойти он же в поисковой строке не допускает показывать id короче он как бы вскрыт от глаз чужих а если $_GET тогда подменить легко.
    И вообще с чего ты взял что он будет подбирать?
    Думаю надо проверить $_SESSION + проверить является ли это сообщение для этого пользователя или же является он отправителем.
    Тогда если не является отправителем или же это сообщение не ему предназначено, то выводишь соответствующее сообщение об ошибке.
     
    #4 _ne_scaju_, 19 июн 2017
    Последнее редактирование: 19 июн 2017
    schmidt нравится это.
  5. schmidt

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

    С нами с:
    9 сен 2012
    Сообщения:
    13
    Симпатии:
    1
    Точно, нужно ещё проверить его ли это сообщение.
    Если не его и это модератор, а сообщение от гл.админа, то сравнить id пользователей или группы.
    Пока вопрос решён, спасибо.
     
  6. _ne_scaju_

    _ne_scaju_ Новичок

    С нами с:
    25 ноя 2016
    Сообщения:
    1.214
    Симпатии:
    54
    @schmidt
    да не за что, рад помочь)