Връщане на потребителя на страницата, която иска след логин

vinsbg

Registered
Здравейте,

имам страница, която позволява на потребител да качва файлове. За целта той трябва да е логнат в профила си.

При опит да отвори страницата проверявам със сесия дали е логнат и ако не е го редиректвам към логин формата със съобщението.

Как мога да го направя, след като се логне успешно да го върне на тази страница?
Знам, че един от начините е да предам страницата към login.php
Код:
header("Location:login.php?location=" . urlencode($_SERVER['REQUEST_URI']));
Така като се зареди login.php ще бъде login.php?location=page.php , нали?

После в login.php проверявам нещо от сорта на
Код:
if($_POST['location'] != '') {
    $redirect = $_POST['location'];
}
И ако има нещо в $_POST['location'] го пращам там.. ако е празно си редиректва към index.php примерно.

Имам два въпроса относно този метод.

1. Това ли е единствения начин да се направи желаното действие?
2. Колко сигурно е това? Все пак се предават разни неща с $_GET заявки.. как може да се защити и какво може да направи някой 'хакерче' ... ?
 
набързо това ми хрумна :
$_SESSION['prednata'] = $_SERVER['HTTP_REFERER']);
и на header location подаваш $_SESSION['prednata'],
но нито съм го пробвал,нито използвал :D
 
stoqnski каза:
набързо това ми хрумна :
$_SESSION['prednata'] = $_SERVER['HTTP_REFERER']);
и на header location подаваш $_SESSION['prednata'],
но нито съм го пробвал,нито използвал :D

Да, реално е нещо такова. Мен ме притеснява сигурността на това нещо и как мога да го защитя. Какви проверки да правя?
 
Позволявай GET метода да работи само, когато е бил редиректнат от някоя страница от твоя сайт. Или ако направиш динамичен вход, който да излиза като прозорче на текущата страница, то в скрито поле пази URL-то до страницата, на която се намира и при пращане на заявката за вход ще препратиш там, където е бил потребителя.
Разбира се при вход прави проверка дали вече няма създадена сесия, за да знаеш да не допускаш форсирано използване на формата.
 
Записвай в една променлива URL-a и преди да го подадеш на хедъра си прави някаква валидация. Например тримваш, правиш проверка за непозволени символи, дължина, някакво сравнение и т.н.
 
Благодаря за отговорите.
Може ли някакви примери как да записвам страницата и някаква валидация.
 
Най-лесно можеш да записваш в сесия. B page.php слагаш:
Код:
session_start();
$_SESSION["getURL"] =  "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

След това в login.php взимаш сесията и правиш проверки:
Код:
$url = $_SESSION["getURL"];
//Проверяваш дали изобщо има такава сесия, ако няма значи е влезнал директно в логина
if($url != null){
$url = trim($url);
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
    //Валиден урл продължаваш
    //Броиш символите и например ако е по малко от 30 или повече от 40
    if(mb_strlen($url) <= 30 && mb_strlen($url) >= 40) {
        //Невалиден урл редиректваш към ерор страница
    }else{
        //Продължаваш с проверките и така докато си доволен от резултата
}
} else {
   //Невалиден урл редиректваш към ерор страница
}

}

Можеш да сложиш например един preg_match и да проверяваш за забранени символи. Друго в момента не се сещам, ама ти помисли все пак :) .
 

Back
Горе