Код (Text): наилучший вариант: 1) переименовать admin.php 2) передавать данные методом POST 3) дополнительно передавать hidden-поле, в котором хранилось бы что-то типа md5(id_удаляемой_записи."секретная строка, одному одмину ведомая"). При обработке формы, на сервере этот хеш проверять.
Есть одно золотое правило. Запросы ИЗМЕНЯЮЩИЕ данные, должны передаваться ТОЛЬКО методом ПОСТ. И нет тех проблем, о которых ты говоришь.
Если уж так хочется делать это методом GET - берешь хеш от содержимого id=2 и секретной строки, и проверяешь передачу его одним из параметров запроса.
Koc * добавить в блок парсинга введенного пользователем текста проверку: ссылки на картинки не должны содержать "?"...
Dagdamor, дурацкое решение. Koc, фильтруй по: Код (Text): /http:\/\/(www.)?example.com\/admin.php/i и Код (Text): /(\/)?admin.php/i Увидел, удалил, записал в базу. P.S. +47 "миллионов до неба" за POST.
lexa Твое ничем не лучше Насчет моего, впрочем, согласен - ведь никто не мешает злоумышленнику забабахать редирект через ссылку, которая пройдет любую мыслимую валидацию. Значит, только шифрование запросов и проверка на 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...
ага, вот как получается. Методом пост передовать не хочу, если только ... Есть форма. В ней 2 кнопки submit. Как узнать на какую нажал пользователь? Можно ли это сделать с отключенным JS?
Код (Text): <form method="POST"> <input type="submit" name="idiot1" value="Тыц"><br> <input type="submit" name="idiot2" value="Пыщ"> </form> <?php if(isset($_POST['idiot1'])) { echo '<br><br><h1>Тыц</h1>'; } else if(isset($_POST['idiot2'])) { echo '<br><br><h1>Пыщ</h1>'; } ?>
юзер размещает в комментах ссылку на свой сайт. админ идёт на этот сайт, а там скрытая пост-форма с автосабмитом на сайт админа. удаление благополучно произошло.
dark-demon +1 Мне уже начинает нравиться идея с реферером... а если у кого-то не работает - это их проблемы Можно, в конце концов, сделать проверку опциональной, а по умолчанию включить.
апсолютно ненавижу когда редактирование контента происходит во фронтэнде пользователя. глупо! хоть и удобно как скажут многие! абсолютно всегда, когда писал CMS для различных сайтов, ВСЕГДА отделял админку от фронтэнда. А уж что там у меня в админ разделе творится известно только мне)))
Горбунов Олег Разочарую, при открытом HTTPS канале автосабмит прекрасно сработает. Я так авторизуюсь на некоторых сайтах, чтобы руками не вбивать. Koc Только реферер проверять, муахаха
бугага, на быдлохабре тоже в последнее время начали об этом писать, только проецируют на друпал. Ссылка с хабра привела на http://drupaldance.com/lessons/secure-code-csrf . Собсно тоже самое, что я в 1 сообщении этой темы написал, только не POST+hidden hash а GET+hash
Koc, ты с советами от друпал.ру осторожнее, т.к. 99% населения такие же хорошие программисты, как я балерина. Ну, и что за пост без цитаты кого-то из Великих: +47 миллионов к мнению этого скромного Алёшки.
а вот мое мнение по этому вопросу: пост - не решение проблемы. Уже ж писали, что его можно подделать. + ну нафига нам городить форму???????77семьсесмь Делать 2 кнопки [Да|Нет], потом обрабатывать их по сраному (isset($_POST['yes'])). Проще же 2 ссылки сделать: да - ?do=delete&id=2&hash=sectrethash нет - на предыдущую страницу или на закрытие модального окна. заметил только что: а причем тут это? редактирование контента - оно только в бекенде. Но ссылку-то можно поставить и во фронтенде, в комментариях где-нить.
Всюжись было дырой, решение одно - быть внимательнее ну или на странице удаления, ещё раз спрашивать, "Вы точно хотите удалить?"