2016-06-20 2 views
-4

Если постоянному и злонамеренному пользователю повезло и загрузили один из ваших секретных файлов в браузер, а эти секретные файлы содержат много переменных, которые определены только в том случае, если файл был перенаправлен, что вы делаете?Что происходит, если кто-то пытается загрузить мой файл аутентификации?

Это проверочный скрипт для login.php, который был моим оригинальный сценарий

if (!isset($_POST['email']) && !isset($_POST['pwd'])) { 
    header ('Location: http://localhost/grace/verify/login.php'); 
    exit; 
} 
// connect to database 
$verify = 'SELECT pwd FROM users WHERE email = ?'; 
// query 

if ($password == $storedPwd) { 
    $_SESSION['verified'] = 'yay!'; 
    $_SESSION['start'] = time(); 
    session_regenerate_id(); 
    header ("Location: $redirect"); 
    exit; 
} else { 
    $error = 'Invalid Email or password'; 
} 

Там может быть так много других способов сделать тот же сценарий, но в моем случае , чтобы решить мою проблему, решение - мой ответ в ответах ниже.

+1

Вы должны опубликовать его на http://codereview.stackexchange.com/. – xdevnull

+1

Ну, простой «лучший» способ состоял бы в том, чтобы файлы хранятся внутри проекта, но за пределами корня документа веб-сервера. –

+2

Какой секретный файл? Они не будут видеть код PHP, если у вас есть все, что нужно. – ceejayoz

ответ

-1

Хорошо, многие люди, прочитавшие это сообщение, даже не удосужились прочитать мой сценарий, я хочу уточнить свой вопрос и ответить на свой вопрос.

Если пользователь, скажем, ей повезло, и загрузите один из ваших секретных файлов, например authenticate.php, в котором существуют переменные, только если она перенаправляется с другой страницы, например login.php. Поэтому мое решение - использовать $_SERVER['HTTP_REFERER'].

if (!isset($_SERVER['HTTP_REFERER'])) { 
    header('Location: http://localhost/grace/login.php'); 
} else { 
    $path = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_PATH); 
    if (!$path == '/login.php') { 
     header('Location: http://localhost/grace/login.php'); 
    } else { 
     // run the code 
    } 
} 

Это гарантирует, что никто не сможет напрямую загружать ваши секретные файлы в браузер.

+2

Не знаю, что вы имеете в виду под «тайной» (моя концепция тайны - это, например, файл TXT с паролем). Если вы имеете в виду исходный код PHP, злоумышленник не может видеть исходный код, если у вас нет вопиющих ошибок конфигурации. Если вы имеете в виду «секретный URL, который только проверенные пользователи знают», вы должны защищать паролем местоположение, а не полагаться на людей, которые не знают его URL. И что бы вы ни пытались выполнить с помощью '$ _SERVER ['HTTP_REFERER']': злонамеренный пользователь может легко подделать его, честный пользователь может удалить его чрезмерно усердным прокси или брандмауэром. –

+2

Это нехорошее решение. 'HTTP_REFERER' - это то, что может быть легко изменено злоумышленником (и его даже не гарантируют, что он будет отправлен вообще - некоторые расширения конфиденциальности и прокси блокируют его). Реальное решение состоит в том, чтобы использовать сеансы PHP на «секретной» странице - проверить '$ _SESSION ['verified']' и выбросить ошибку или перенаправить на страницу входа на секретные страницы, если она не установлена. – ceejayoz

+1

Кстати, мы прочитали ваш вопрос. Это было очень плохо объяснено. – ceejayoz

Смежные вопросы