it-swarm.com.de

verhindern Sie direkten URL-Zugriff auf die PHP-Datei

Ich habe eine PHP-Datei say "check.php" in meiner Website, die ausgeführt wird, wenn ein Formular gesendet wird.

sagen Sie, meine Website ist "myweb.com" und die PHP-Datei befindet sich in einem Verzeichnis "PHP". 

Ich möchte den direkten Zugriff auf die "check.php" -Datei verhindern, dh wenn jemand die URL "myweb.com/PHP/check.php" eingibt, sollte die PHP-Datei nicht ausgeführt werden es sollte stattdessen eine Fehlermeldung zurückgeben.

Ich habe versucht, den Zugriff zu verhindern, indem ich eine Regel in .htaccess gesetzt habe, aber es blockiert den PHP-Status, selbst wenn ich versuche, das Formular zu senden.

.htaccess-Regel: 

RewriteEngine on 
RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/ 
(.*)\.php$ /index.html [L] 

Gibt es eine Möglichkeit, dies zu tun?

8
It Assistors

Sie können es mit PHP machen

<?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' ) );

    }
?>
17
RamRaider

Fügen Sie diesen Code oben in check.php ein:

if(!isset($_SERVER['HTTP_REFERER'])){
    // redirect them to your desired location
    header('location:../index.php');
    exit;
}

Wenn der Benutzer durch einen direkten Zugriff auf check.php auf die URL zugreift, werden sie an den gewünschten Ort umgeleitet.

4
Westly Tanbri

Versuchen Sie dies in Root/.htaccess:

RewriteEngine on


RewriteCond %{REQUEST_METHOD} !^POST$
RewriteRule ^php/check.php$ - [NC,R=404,L]

Dies gibt zurück, dass 404 nicht gefunden wird, wenn auf die check-post-Methode nicht auf check.php zugegriffen wird.

3
starkeen

Ich habe die ausgewählte Antwort ausprobiert, bin aber auf einige Probleme bei der Implementierung gestoßen, vor allem, wenn ich Werte aus Funktionen in der Datei PHP mit GET mit Ajax zurückgeben wollte.

Nach ausführlichen Recherchen zu anderen Lösungen (und ein paar eigenen Tests) habe ich folgenden Code gefunden:

<?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. */
}
?>

Ich fand heraus, dass der oben genannte Code so funktioniert, wie ich es wollte, und ich glaube nicht, dass er Probleme mit mehreren Browsern haben würde, wie es bei der anderen Antwort der Fall war. Ich glaube auch nicht, dass es irgendwelche Sicherheitsprobleme hätte, aber ich könnte mich irren (bitte sagen Sie mir, ob und warum). Ich bin relativ neu in der Web-Programmierung.

Fügen Sie diesen Code einfach zu jeder Datei hinzu, die Sie für den direkten Zugriff auf URLs blockieren möchten (bevor alles erforderlich ist, einschließlich session_starts), und Sie können loslegen.

1
Martin Koch

dies ist, was Google in ihren PHP-Beispielen verwendet 

if (php_sapi_name() != 'cli') {
  throw new \Exception('This application must be run on the command line.');
}
0
Toskan
if (basename($_SERVER['SCRIPT_FILENAME']) === 'common.php')
{
    exit('This page may not be called directly!');
}
0
Erik Thiart

Versuchen Sie es auch. Vergangenheit oben in check.php 

<?php debug_backtrace() || die ("<h2>Access Denied!</h2> This file is protected and not available to public."); ?>

Ein Zugriff verweigert wird angezeigt, wenn auf die Datei direkt in der URL zugegriffen wird

0
icynets