powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Запретить доступ к php файлу напрямую, только после нажатия кнопки.
15 сообщений из 15, страница 1 из 1
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38762321
Есть страница с формой комментария.

После заполнения всех полей и нажития кнопки "Добавить комментарий" пользователь перенаправляется на страницу с благодарностью вида: www.site.ru/thank.php?article=name
а затем повторно на страницу с уже добавленным комментарием.

Вопрос:

как запретить пользователю напрямую заходить по адресу (только по нажатию кнопки "Добавить комментарий"):
www.site.ru/thank.php?article=name

Задам вопрос по другому:

Как на PHP (или в .htaccess) организовать проверку в файле thank.php - напрямую в него заходят или попадают после нажатия кнопки "Добавить комментарий".

Спасибо!
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38762334
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При отдаче формы в сессии устанавливаете контрольную переменную, которую и проверяете при запросе страницы thank.php?article=name. Если переменной нет - отправляете пользователя на исходную страницу. Если с переменной все в порядке - удаляете ее и производите какие-то действия.
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38762351
Насколько я знаю Ваше решение уязвимое. Оно реализовано в WordPress. У меня есть сайт на WordPress, так вот там спамеры-боты напрямую отправляют данные в обработчик комментариев а не через форму. Если я правильно понимаю схему данные методом POST можно отправлять не только с родной страницы. Может есть какие то внутренние резервы PHP?
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38762368
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сессию (куки) стырить - то можно делать что угодно.
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38762411
Небольшая корректива.

Сам обработчик комментариев находится в том же файле где сама форма. Файл thank.php не обработчик, а только страничка с благодарностью, через которую методом GET передается одна переменная - имя статьи. Я ее сделал чтобы очищалась форма после добавления комментария. А методом POST туда ничего не передается.

Собственно два вопроса:

1. Возможно ли запретить пользователю запретить заходить на такую страницу (я так понимаю контрольную переменную здесь задать невозможно)?
2. Правильно ли я сделал? Стоит ли мне сейчас вытаскивать обработчик в новый файл?
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38762412
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Да, возможно.
2. Не имеет значения.
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38762423
Подскажите, как можно передать контрольную переменную в данном случае?

Я знаю только 1 способ:

<input type="hidden" value="kontrolnaya_peremennaya">

но эта переменная отправляется по адресу в <form action="/"> а мне нужно ее передать по адресу www.site.ru/thank.php?article=name

Спасибо.
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38762432
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стремно себя цитировать, но раз уж не читаете, повторю:
vkleв сессии устанавливаете контрольную переменную
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38762437
vkle,

ок, буду разбираться. Спасибо!
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38762453
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно сделать все аяксом, красиво, быстро и голову ломать не надо.
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38762487
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SharuPoNemnogu,

И как аякс поможет топикстартеру защититься от "прямого" поста, минуя форму? ;-)
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38762517
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Степан РечнойПодскажите, как можно передать контрольную переменную в данном случае?

Я знаю только 1 способ:

<input type="hidden" value="kontrolnaya_peremennaya">

но эта переменная отправляется по адресу в <form action="/"> а мне нужно ее передать по адресу www.site.ru/thank.php?article=name

Спасибо.

==========
опуская долгие рассказы о том, сколько ты ещо нового узнаешь для себя о шттп, о работе веба и прочего....

сразу отвен на неозвученый вопрос.

Вопрос - что тебе делать, чтоб боты не добавляли коментарии


ответ - по простому

сделай чтобы при отправке формы(событие он сабмит формы) в форму добавлялось джаваскриптом скрытое поле с значением - напримем текстом - 'I am not a BOT :)'

и проверяй по нему.(боты, они обычно анализируют штмл, а вот джаваскрипт на них не
работает)

текст может меняться
скажем текст для переменой генерируеться любой
а в форме вкачестве адреса обработчика(форма методом пост) пишеться ссылка
obrabotchik.php?action=xxxx
где хххх хеш от сгенерированого значения для скрытого поля...хешировать можно с солью

а чтобы на скрипт определёный можно было зайти(в твоём случае только в результате внутренего редиректа) - тоесть зайти на сенкью только как перенаправление
воспользоваться всё темже методом - передавать пару значений методом гет, через кукисы
значение и хеш с солью

можно в сесии сохранять факт отправки коментария и только при наличии этого факта пускать на страницу
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38763390
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для вордпресса можно посмотреть реализацию check_ajax_referer()
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38764263
alex564657498765453,

Спасибо! Интересно а есть ли какой либо способ без использования ЯваСкрипт. Дело в том что я JS не знаю совсем и мне бы хотелось чтобы система была самодостаточной, независящей от настроек браузера пользователя. Я так понимаю что если отключить JS комментарии отправляться не будут.

vkle,

попробовал с помощью сессий. Все работает ок, только возникло 2 вопроса.

1. Мне показалось что после подключения сессий время формирования страницы существенно увеличилось, это заметно даже не вооруженным глазом. Если раньше страница появлялась меньше чем через секунду, то сейчас явно больше. Хотя когда я вставил скрипт измеряющий время генерации страницы то разницы особо не заметил. В обоих случаях показывает время примерно 0.02 секунд, за исключением первой загрузки страницы - 0.7 сек. В файл добавил только 2 строчки: session_start(); $_SESSION['ch4R']=1;
Могут ли сессии так сильно грузить систему?

2. Теперь если напрямую пытаться зайти по ссылке www.site.ru/thank.php?article=name до отправки комментария через форму, то как и положено доступа к ней нет. Но если отправить комментарий, то можно заходить по ссылке напрямую сколько угодно раз, пока полностью не закроешь браузер и не откроешь заново. Мне бы хотелось чтобы страница с благодарностью появлялась на пару секунд после добавления комментария, а после ее закрытия становилась недоступна для прямого доступа. Сессию и контрольную переменную уничтожаю сразу после загрузки страницы с благодарностью - не помогает. Как быть в этой ситуации?

Еще раз спасибо всем за помощь!!!!!!!!!
...
Рейтинг: 0 / 0
Запретить доступ к php файлу напрямую, только после нажатия кнопки.
    #38764278
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Степан Речной,

1. Как и при выполнении любой функции, какая-то нагрузка/задержка от сессий есть. Другой вопрос в значениях. 0,7 секунды - это как-то аномально много, такое значение не оправдывает даже необходимость дополнительного обращения к диску, где хранятся файлы сессий.

2. При успешном выполнении задачи нужно очищать контрольную переменную. Вероятно, она не уничтожается или что-то не так с проверкой. Или же, что-то не так с механизмом сессий, на что косвенно указывает и пункт 1.

Для более тонкого контроля (если есть вероятность одновременного открытия нескольких экземпляров страницы одним пользователем) можно вместо фиксированного имени переменной генерировать случайный код и отправлять его скрытым полем формы, а на приеме проверять соответствие.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Запретить доступ к php файлу напрямую, только после нажатия кнопки.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]