Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как закрыть доступ через строку браузера?


Автор: bscint13 13.2.2014, 04:14
Подскажите, пожалуйста, Как закрыть доступ к странице (файлу скрипта) через строку браузера?

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

Закрыть доступ к файлу через .htaccess не удалось, используя стандартные правила типа deny.

Есть ли другой способ? Конечно, не переделывая скрипт целиком, через использование cookie.

Я не программист, и довольно очень далёк от этого, даже не начинающий, просто пытаюсь и пробую... очень надо, помогите, пожалуйста...  smile 

Автор: ksnk 13.2.2014, 09:18
Код

if($_SERVER['REQUEST_METHOD']=='POST'){
   // это вход патежной системы
} else {
   // это вход через адресную строку
}

?

Автор: baldina 13.2.2014, 09:39
чтобы сделать это наверняка, придется пользоваться session

Автор: ksnk 13.2.2014, 10:55
baldina, нет. Если на банковском клиенте покупатель потеряет минут 20 - наша сессия уже может кончится.
Обычно, платежные системы передают идентификатор операции. По идентификатору нужно в нашей базе уточнить состояние заказа, есть он или нет и оплачивается или нет. По идентификатору нужно слазить на банковский сервер и запросить статус операции. Бывают очень заковыристые схемы оплаты.
А вот полученному статусу уже можно верить.

Автор: AJIeKceuD 13.2.2014, 11:48
Вообще на сколько я знаю именно переадресации платежной системы доверять нельзя. Там просто показывается сообщение о том что оплата прошла успешно, а основная работа происходит на фоне. Не уверен на счет обычно, но я несколько раз сталкивался что в настройках платежной системы можно только забить URL для переадресации после успешной оплаты или в случае провала. 

Опять же в любом случае на основе этой переадресации нельзя утверждать что оплата была. Либо отправлять запрос платежной системе о статусе заказа, либо я чаще сталкивался с тем что система сама оповещает вас когда статус меняется - после переадресации статус может поменяться только через несколько минут.

Автор: baldina 13.2.2014, 12:03
ок, session в широком смысле. я хотел подчеркнуть, что на базе только запроса надежно сделать не получится
Цитата(ksnk @  13.2.2014,  10:55 Найти цитируемый пост)
сессия уже может кончится

ну это от разработчика зависит.
к тому же я не понимаю как связаны 20мин в клиенте и переадресация после post: переадресация занимает секунды

Автор: ksnk 13.2.2014, 12:48
Цитата(baldina @  13.2.2014,  12:03 Найти цитируемый пост)
к тому же я не понимаю как связаны 20мин в клиенте
 
Хм... Вот примерный алгоритм оплаты через сбербанковский терминал.
  •  клиент оформил заказ и пожелал оплатить через карточку.
  •  магазин выполняет операцию "регистрация заказа" через Rest-апи сбербанка, получает адрес терминала, переадресует (header:location) клиента по этому адресу
  • клиент через терминал вводит свои параметры, подтверждает смски, делает нужные телодвижения. Все это время никакой активности клиента с нашим сайтом нет.
  •  клиент может просто зарыть терминал, в этом случае никакой реакции сбербанка на наш сервер не будет
  •  клиент может нормально завершить операцию кнопкой "закрыть терминал", в этом случае о сбербанковский терминал переадресует окно терминала на наш сервер.
Таким образом, в течении оплаты никакой активности клиента на нашем сервере нет. Сессия может спокойно устареть. Хотя, со сбербанком, не очень удачный пример, у него время сессии терминала минут 15 от старта сессии. 


Автор: bscint13 13.2.2014, 12:59
Цитата(ksnk @ 13.2.2014,  09:18)
Код

if($_SERVER['REQUEST_METHOD']=='POST'){
   // это вход патежной системы
} else {
   // это вход через адресную строку
}

?

Благодарю за совет и пример!!!  smile 

Вот только как его и куда применить? Подскажите, пожалуйста...

Если правильно понимаю... его надо вставить на страницу, которую требуется закрыть от доступа из вне через строку браузера, сразу же после начала PHP кода, т.е. после <?php

Правильно или всё же нет??? Заранее благодарю за ответ.  smile

Добавлено через 3 минуты и 24 секунды
Цитата(baldina @ 13.2.2014,  12:03)
ок, session в широком смысле. я хотел подчеркнуть, что на базе только запроса надежно сделать не получится
Цитата(ksnk @  13.2.2014,  10:55 Найти цитируемый пост)
сессия уже может кончится

ну это от разработчика зависит.
к тому же я не понимаю как связаны 20мин в клиенте и переадресация после post: переадресация занимает секунды

Вы совершенно правы, переадресация из платёжки на страницу сайта после оплаты происходит в течение 10 секунд...  smile 

Автор: baldina 13.2.2014, 13:57
ksnk, понятно. если участвует более одного сайта, то задержка может быть большой, и одной сессией, без бд не обойдешься. 
но технических проблем с устареванием сессии я не вижу: 20 мин достаточно; можно установить хоть 10 часов

Цитата(bscint13 @  13.2.2014,  12:59 Найти цитируемый пост)
 переадресация из платёжки на страницу сайта после оплаты происходит в течение 10 секунд

ну, если она происходит с чужого сайта, это нам не поможет, см. выше.

Добавлено через 2 минуты и 35 секунд
итого: скрипт страницы, к которой не должно быть прямого доступа, должен 
1. идентифицировать клиента (это может быть сессия или любой другой подходящий id)
2. проверять состояние платежа в базе

парой строк тут не обойтись 

Автор: ksnk 13.2.2014, 14:46
Цитата(bscint13 @  13.2.2014,  12:59 Найти цитируемый пост)
Если правильно понимаю... его надо вставить на страницу, которую требуется закрыть от доступа из вне через строку браузера, сразу же после начала PHP кода, т.е. после <?php

В общем, да. 
А чья система оплаты ставится?

Автор: bscint13 13.2.2014, 18:35
Цитата(ksnk @ 13.2.2014,  14:46)
Цитата(bscint13 @  13.2.2014,  12:59 Найти цитируемый пост)
Если правильно понимаю... его надо вставить на страницу, которую требуется закрыть от доступа из вне через строку браузера, сразу же после начала PHP кода, т.е. после <?php

В общем, да. 
А чья система оплаты ставится?

Не совсем понятен вопрос... чья система ставится...  smile  

электронная платёжная... Perfect Money. Вы это имели ввиду??? 

По идее, как подсказывает интуиция, Ваш пример должен подойти, однако кто знает... не проверив, не узнаешь... сегодня постараюсь проверить и уже обязательно отпишусь здесь же...

Благодарю за помощь!!! Также благодарен Всем участникам данного поста!!!  smile  smile

Добавлено через 8 минут и 38 секунд
Цитата(baldina @ 13.2.2014,  13:57)
ksnk, понятно. если участвует более одного сайта, то задержка может быть большой, и одной сессией, без бд не обойдешься. 
но технических проблем с устареванием сессии я не вижу: 20 мин достаточно; можно установить хоть 10 часов

Цитата(bscint13 @  13.2.2014,  12:59 Найти цитируемый пост)
 переадресация из платёжки на страницу сайта после оплаты происходит в течение 10 секунд

ну, если она происходит с чужого сайта, это нам не поможет, см. выше.

Добавлено @ 14:00
итого: скрипт страницы, к которой не должно быть прямого доступа, должен 
1. идентифицировать клиента (это может быть сессия или любой другой подходящий id)
2. проверять состояние платежа в базе

парой строк тут не обойтись

Вы правы... идентификация клиента выполняется с помощью $_Session, а вот в проверке состояния платежа в базе, наверное в более сложном варианте скрипта он бы имел место - нет необходимости... хотя???

Во всяком случае в используемом мной скрипте таблица в базе под платежи не предусмотрена...

Прошу отнестись с пониманием к написанному мной... как писал в первом посте - в PHP и вообще программировании - Я лузер... в наше время очень тяжело найти надёжного и верного партнёра, согласитесь...  smile  поэтому приходится пробовать и делать самому и то, что нужно...  smile 

Автор: ksnk 13.2.2014, 20:19
Цитата(bscint13 @  13.2.2014,  18:35 Найти цитируемый пост)
Perfect Money. Вы это имели ввиду??? 

Да, именно это. Там, видимо, простая форма для оплаты?
Ну, для несложных магазинчиков без бухгалтерии можно и так. Все более сложные операции, типа возврата средств и неожиданной доплаты за заказ можно и вручную проводить.

К тому же нужно обязательно проверять корректность платежа, хотя бы используя предлагаемые там скрипты проверки, иначе довольно легко обмануть такую систему оплаты.



Автор: bscint13 14.2.2014, 03:07
Цитата(ksnk @ 13.2.2014,  09:18)
Код

if($_SERVER['REQUEST_METHOD']=='POST'){
   // это вход патежной системы
} else {
   // это вход через адресную строку
}

?

Да... меня постигло разочарование... smile  либо я не правильно вставил эти строки, либо они не подходят...

К сожалению, данная страница всё-равно доступна из строки браузера, никакой реакции...

Вот как у меня записано в коде данной страницы:

<?
if($_SERVER['REQUEST_METHOD']=='POST'){
   // это вход платежной системы
} else {
   // это вход через адресную строку
}
include'../config.php';
$title="$CONFIG->site Оплата прошла успешно!";

и так далее...

Скажите, пожалуйста, я правильно вставил Ваш пример кода или всё же нет? 

Автор: ksnk 14.2.2014, 06:57
Имелось ввиду что-то вроде
Код

<?
if($_SERVER['REQUEST_METHOD']=='POST'){
   // это вход платежной системы
include'../config.php';
$title="$CONFIG->site Оплата прошла успешно!";
//и так далее...
} else {
   // это вход через адресную строку

   header("HTTP/1.0 404 Not Found");
   echo 'Тут рыбы нет';
   exit();
}


Автор: bscint13 14.2.2014, 15:00
Цитата(ksnk @ 14.2.2014,  06:57)
Имелось ввиду что-то вроде
Код

<?
if($_SERVER['REQUEST_METHOD']=='POST'){
   // это вход платежной системы
include'../config.php';
$title="$CONFIG->site Оплата прошла успешно!";
//и так далее...
} else {
   // это вход через адресную строку

   header("HTTP/1.0 404 Not Found");
   echo 'Тут рыбы нет';
   exit();
}


Я действительно не так написал, в принципе этого и следовало ожидать... поэтому прошу не судить строго... особенно за последующий вопрос и оказать всё же помощь... за что буду очень благодарен и признателен.

Небольшое уточнение, простите уж...
Фрагмент кода:

} else {
   // это вход через адресную строку

   header("HTTP/1.0 404 Not Found");
   echo 'Тут рыбы нет';
   exit();
}


указанный после... и так далее... 

Следует писать после футера, т.е. нижнего колонтитула сайта, перед закрытием ?> PHP кода или всё же до футера... Простите не так богат знаниями и опытом, чтобы знать куда влепить данный фрагмент.

И от всей души поздравляю Вас и участников данного поста с Праздником Всех Влюблённых, Днём Святого Валентина... Здоровья, счастья, любви и всех благ!!!


Автор: ksnk 14.2.2014, 15:33
Код

<?
if($_SERVER['REQUEST_METHOD']!='POST'){
   // это вход через адресную строку
   header("HTTP/1.0 404 Not Found");
   echo 'Тут рыбы нет';
   exit();
}

   // это вход платежной системы
include'../config.php';
$title="$CONFIG->site Оплата прошла успешно!";
//и так далее...


Проще сделать вот так. первые 6 строчек добавить в начало файла.

Автор: bscint13 14.2.2014, 18:06
Цитата(ksnk @ 14.2.2014,  15:33)
Код

<?
if($_SERVER['REQUEST_METHOD']!='POST'){
   // это вход через адресную строку
   header("HTTP/1.0 404 Not Found");
   echo 'Тут рыбы нет';
   exit();
}

   // это вход платежной системы
include'../config.php';
$title="$CONFIG->site Оплата прошла успешно!";
//и так далее...


Проще сделать вот так. первые 6 строчек добавить в начало файла.

Благодарю... кажется работает... в том плане, что страница не доступна из строки браузера... выдаёт чистую страницу и вверху пишет... как Вы указали в echo 'Тут рыбы нет'

Осталось проверить в действии с платёжной системой. 

Я Вам очень благодарен, даже не представляете как, можно сказать почти год бьюсь над этой проблемой, уже бился... правда больше в ожиданиях.

Надеюсь, что и с платёжкой будет всё нормально...

Не хотелось бы менять тему и создавать новую, точнее новый пост... могли бы Вы примерно показать как создать правило для проверки номера счёта, собственно валидации... 

ereg уже не используется, вместо него preg_match, правильно?

Номер счёта состоит из двух больших латинских букв и от 7 до 9 цифр.

Возможно ли это указать в одной строке правила? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)