Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как закрыть доступ через строку браузера? Как закрыть доступ через строку браузера 
V
    Опции темы
bscint13
  Дата 13.2.2014, 04:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 13.2.2014

Репутация: нет
Всего: нет



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

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

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

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

Я не программист, и довольно очень далёк от этого, даже не начинающий, просто пытаюсь и пробую... очень надо, помогите, пожалуйста...  smile 
PM MAIL   Вверх
ksnk
Дата 13.2.2014, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Код

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

?



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
baldina
Дата 13.2.2014, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



чтобы сделать это наверняка, придется пользоваться session
PM MAIL   Вверх
ksnk
Дата 13.2.2014, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



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

Это сообщение отредактировал(а) ksnk - 13.2.2014, 10:56


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
AJIeKceuD
Дата 13.2.2014, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 6.9.2012

Репутация: нет
Всего: нет



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

Опять же в любом случае на основе этой переадресации нельзя утверждать что оплата была. Либо отправлять запрос платежной системе о статусе заказа, либо я чаще сталкивался с тем что система сама оповещает вас когда статус меняется - после переадресации статус может поменяться только через несколько минут.
PM MAIL   Вверх
baldina
Дата 13.2.2014, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



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

ну это от разработчика зависит.
к тому же я не понимаю как связаны 20мин в клиенте и переадресация после post: переадресация занимает секунды
PM MAIL   Вверх
ksnk
Дата 13.2.2014, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



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




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
bscint13
Дата 13.2.2014, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 13.2.2014

Репутация: нет
Всего: нет



Цитата(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 
PM MAIL   Вверх
baldina
Дата 13.2.2014, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



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

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

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

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

парой строк тут не обойтись 
PM MAIL   Вверх
ksnk
Дата 13.2.2014, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



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

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


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
bscint13
Дата 13.2.2014, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 13.2.2014

Репутация: нет
Всего: нет



Цитата(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 
PM MAIL   Вверх
ksnk
Дата 13.2.2014, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



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

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

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





--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
bscint13
Дата 14.2.2014, 03:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 13.2.2014

Репутация: нет
Всего: нет



Цитата(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 Оплата прошла успешно!";

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

Скажите, пожалуйста, я правильно вставил Ваш пример кода или всё же нет? 
PM MAIL   Вверх
ksnk
Дата 14.2.2014, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Имелось ввиду что-то вроде
Код

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

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




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
bscint13
Дата 14.2.2014, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 13.2.2014

Репутация: нет
Всего: нет



Цитата(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 кода или всё же до футера... Простите не так богат знаниями и опытом, чтобы знать куда влепить данный фрагмент.

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


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.