Есть станица с вопросом, например:
сайт/questions/5
Эта страница содержит вопрос с id 5 которые хранятся в таблице: questions
И тут же на странице есть форма для ответа на вопрос, ответы хранятся в таблице: answers
Контроллер AddAnswerController обрабатывает запись ответа.
Но нужно же как то знать на какой вопрос происходит ответ!
Если номер вопроса передавать через Post запрос из формы со скрытым инпутом, то при перехвате его можно изменить и отправить ответ под другой вопрос) Какие способы используются для таких ситуаций?
Проблемы нет вообще - клиент говорит что он отвечает и на какой вопрос. Просто проверить при записи - имеет ли клиент право отвечать на данный конкретный вопрос. На этом весь web построен.
Вот очень захотелось процитировать один из ответов автора в другом вопросе -
Мда... Приложение сделать решили, а такую элементарщину не можете))) Ахаха))) Поэтому в сети миллионы говносайтов и подобных предложений и таких же тупых ответов от мастеров в кавычках)))
chelkaz: А по теме - <вариант> Передавай ид вопроса через hidden. А в контроллере смотри роутер вопроса и id в нем. Если ид из hidden == id из роутера, то всё ок, сохраняем. вариант>
Я делал немного по другому, создавал скрытый id и скрытый хэш по своей комбинации этого id так как комбинацию знает только контроллер, то подделать не возможно. И в контроллере принятый id перевожу в такой же хэш и сверяю. Это думаю 100 поможет, но посто интересно какие методы используются? Так как на многих известных ресурсах можно запросто подделывать запросы.
Так вы id вопроса не в форму input'ом ставьте а смотрите роутер вопроса с когда срабатывает post-запрос и роутер превращаете в id и к этому id прикрепляете ответ.
Согласен, что можно подделать url как написали выше. Скажите пожалуйста, не очень ясно. csrf token по умолчанию настроен на защиту форм в laravel? Или требуется его проверка?
Но то что в доках я читал и использую csrf token по умолчанию. Но я не могу понять, то есть дополнительная его проверка не требуется в контроллере? Ну например я изменю в запросе id вопроса. Как пойдет проверка с помощью csrf token?
Создал скрытый инпут с id текущего вопроса, при ответах все хорошо записывается. Но Изменил в исходнике id вопроса на другой существующий, и тоже все записалось но в другой вопрос. Оно и логично. Получается из одной странице можно ответить на другой вопрос. Как этого избежать? csrf token стоит и все настроено точно. Просто тут логически нет запрета. Так как вопрос с id другим существует. Пользователь имеет права добавлять. А к контроллеру поступают данные из формы. Он их и обрабатывает.