запретить прямой url-доступ к php-файлу
У меня есть файл php say "проверить.на PHP" на моем веб-сайте, и он выполняется при отправке формы.
скажем мой сайт "myweb.com" и php-файл в каталог "РНР"
Я хочу предотвратить прямой доступ url к " check.php " файл, т. е. если кто-то вводит url "myweb.com/PHP/check.php" ,тогда php-файл не должен выполняться, и он должен возвращать сообщение об ошибке вместо.
Я попытался предотвратить доступ, установив правило .htaccess, но он блокирует php, даже когда я пытаюсь отправить форму.
.правило htaccess файл :
RewriteEngine on
RewriteCond %{THE_REQUEST} .php[ /?].*HTTP/
(.*).php$ /index.html [L]
есть ли способ сделать это ?
5 ответов
вы можете сделать это с помощью PHP
<?php
/* at the top of 'check.php' */
if ( $_SERVER['REQUEST_METHOD']=='GET' && realpath(__FILE__) == realpath( $_SERVER['SCRIPT_FILENAME'] ) ) {
/*
Up to you which header to send, some prefer 404 even if
the files does exist for security
*/
header( 'HTTP/1.0 403 Forbidden', TRUE, 403 );
/* choose the appropriate page to redirect users */
die( header( 'location: /error.php' ) );
}
?>
попробуйте это в Root/.реврайт :
RewriteEngine on
RewriteCond %{REQUEST_METHOD} !^POST$
RewriteRule ^php/check.php$ - [NC,R=404,L]
это вернет 404 не найден, если проверить.php не доступен методом form post.
поместите этот код в верхней части чека.на PHP:
if(!isset($_SERVER['HTTP_REFERER'])){
// redirect them to your desired location
header('location:../index.php');
exit;
}
Если проверка доступа пользователя.php по типу URL напрямую, он перенаправит их в нужное место.
попробуйте это тоже. Прошлое в верхней части чека.в PHP
<?php debug_backtrace() || die ("<h2>Access Denied!</h2> This file is protected and not available to public."); ?>
Доступ запрещен будет представлен, когда файл имеет доступ непосредственно в url
я попробовал выбранный ответ, но столкнулся с некоторыми проблемами, реализующими его, особенно если я хотел вернуть значения из функций внутри PHP-файла с помощью GET with Ajax.
после довольно обширных исследований других решений (и небольшого тестирования) я придумал следующий код:
<?php
$currentPage = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if ($_SERVER['REQUEST_METHOD'] == "GET" && strcmp(basename($currentPage), basename(__FILE__)) == 0)
{
http_response_code(404);
include('myCustom404.php'); // provide your own 404 error page
die(); /* remove this if you want to execute the rest of
the code inside the file before redirecting. */
}
?>
Я обнаружил, что код выше работал так, как я хотел, и я не думаю, что у него будут проблемы с несколькими браузерами, как был указан другой ответ нет. Я также не думаю, что у него будут проблемы с безопасностью, но я могу ошибаться (пожалуйста, скажите мне, если я (и почему)), я относительно новичок в веб-программировании.
просто добавьте этот код поверх каждого файла, который вы хотите заблокировать прямой доступ к URL (до того, как все, даже требует, включает и session_starts), и вам хорошо идти.