防止直接访问PHP脚本

时间:2013-11-21 19:19:21

标签: php

我修改了.htaccess以删除.php扩展名。

以下代码我使用|| $parts['filename']修改为不允许直接访问。我的目标是阻止/page.php/page的直接访问。但是它不起作用。

/***************DO NOT ALLOW DIRECT ACCESS************************************/
$parts = pathinfo(__FILE__);
if ( stripos( $_SERVER[ 'REQUEST_URI' ], (basename( __FILE__ ) || $parts['filename'] )) !== FALSE ) { 
    header("Location: ./"); 
  die();
}

mod之前的代码阻止访问/page.php允许访问/page(我不希望这样)

/***************DO NOT ALLOW DIRECT ACCESS************************************/
if ( stripos( $_SERVER[ 'REQUEST_URI' ], basename( __FILE__ ) ) !== FALSE ) { 
    header("Location: ./"); 
  die();
}

如何阻止同时访问/page.php/page

3 个答案:

答案 0 :(得分:0)

如果您不想访问页面,请执行以下操作:

if(!defined("IN_SCRIPT")) die();

确保在包含该文件的每个脚本中定义IN_SCRIPT。

像phpBB这样的软件也使用这种方法。

答案 1 :(得分:0)

能够包含来自其他脚本的文件,但不允许通过apache直接提供服务:

在任何要阻止直接访问的php文件的顶部:

<? __FILE__ != $_SERVER['SCRIPT_FILENAME'] || die('no direct access' );

编辑以包含示例

的.htaccess

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php

test.php的

<?

header( 'content-type: text/plain');

var_dump( __FILE__ == $_SERVER['SCRIPT_FILENAME'] );

include 'test-inc.php';

测试inc.php

<? __FILE__ != $_SERVER['SCRIPT_FILENAME'] || die('no direct access' );

var_dump( __FILE__ == $_SERVER['SCRIPT_FILENAME'] );

加载/test.php和/ test

的输出
bool(true)
bool(false)

加载/test-inc.php和/ test-inc

的输出
no direct access

答案 2 :(得分:-1)

在你的索引中

session_start();
$_SESSION['logged'] = "OK";

然后在您要验证的每个其他文件上包含

session_start();
$login = isset($_SESSION["logged"]) ? $_SESSION["logged"] : false;
if($login != "OK"){
  header("Location: path/to/your/index");
  exit;    
}