запретить прямой 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), и вам хорошо идти.