阻止对包含php脚本的文件夹的直接html访问

阻止对包含php脚本的文件夹的直接html访问,php,.htaccess,Php,.htaccess,我有访问mysql的php脚本。我把它们放在一个文件夹SourceFiles中。我想确保用户不能直接指向这些脚本中的任何一个,因此不能指向mysql数据库。我有一个登录设置,可以访问这些脚本,而且一切正常,但用户也可以直接指向这些文件 将文件夹移动到上面的public\u html不起作用,因为我无法发布到public\u html之外的脚本 使用.htaccess保护文件夹不起作用,因为每个用户都需要访问受保护的文件夹 我如何确保用户只能通过登录访问该文件夹中的php脚本,我目前已经用php编

我有访问mysql的php脚本。我把它们放在一个文件夹SourceFiles中。我想确保用户不能直接指向这些脚本中的任何一个,因此不能指向mysql数据库。我有一个登录设置,可以访问这些脚本,而且一切正常,但用户也可以直接指向这些文件

将文件夹移动到上面的public\u html不起作用,因为我无法发布到public\u html之外的脚本

使用.htaccess保护文件夹不起作用,因为每个用户都需要访问受保护的文件夹


我如何确保用户只能通过登录访问该文件夹中的php脚本,我目前已经用php编写了登录代码。

我个人会添加一篇额外的帖子或获取

在受保护页面的顶部有类似的内容


在OOP php之前,我就是这样做的

在您的主要应用程序入口点:

define('ACCESS',1);
在所有受保护的脚本上:

if (!defined(ACCESS)) exit;
所以,如果用户直接访问您的任何“受保护”文件,它们将不会被执行

编辑
我看你已经建立了登录系统…为什么不直接使用它呢?存储在$\u SESSION var中,该变量定义是否允许用户访问该脚本。…

您可以将此代码放在每个文件的开头:

/***************DO NOT ALLOW DIRECT ACCESS************************************/
if ( (strpos( strtolower( $_SERVER[ 'SCRIPT_NAME' ] ), strtolower( basename( __FILE__ ) ) ) ) !== FALSE ) { // NOT FALSE if the script's file name is found in the URL 
  header( 'HTTP/1.0 403 Forbidden' );
  die( '<h2>Direct access to this page is not allowed.</h2>' );
}
/*****************************************************************************/

您声明您已经实现了身份验证。既然Stackoverflow上有一个搜索引擎可以找到类似或相同的问题,那么为什么你不能在脚本的开头就要求一个有效的用户呢?即使他们在一个受保护的文件夹中,你仍然可以“要求”他们。你为什么建议使用Google呢?@Jocelyn,因为你可以在Google上搜索关于这个主题的教程。在这里试一试,你们们会被食人魔咬得哑口无言。显然不会,因为当你们们问问题时,它会进行搜索,而且还会出现重复的问题。谷歌搜索,通常会让你找到已经问过的最流行的堆栈问题。所以。。。然后人们可以通过访问foo.php?p=a来访问您的脚本……鉴于我得到了三个答案,我觉得奇怪的是,它作为一个糟糕的问题被关闭了。我选择这个作为答案,因为它处理问题时不需要创建我自己的基于变量的逻辑,而是使用内置$\u服务器变量的属性。好吧,要证明它是一个真正的问题,事实上有3个答案,所以它不是那么含糊不清。也不明白。好吧,所以-1表示在选择解决方案之前没有尝试解决方案。。。。但我有问题。由于我通过使这些php文件成为html表单中的动作来调用它们,所以php文件名显示在URL名称中,因此如果我将此代码放入脚本B中,脚本A无法调用/发布到脚本B。我是否遗漏了什么?我需要能够通过表单调用我自己的sript,只是不想以任何其他方式直接访问。当然。它不会阻止来自其他脚本或html表单的任何调用。不过,使用POST而不是GET很重要,因为最后一个在浏览器的地址栏中显示查询。我不能确定它是否适合您正在开发的应用程序类型,但您可以随时选择不接受答案。没问题,我明白。这个想法是解决你问题的答案。如果没有,就没有理由继续接受它。
/***************DO NOT ALLOW DIRECT ACCESS************************************/
if ( (strpos( strtolower( $_SERVER[ 'SCRIPT_NAME' ] ), strtolower( basename( __FILE__ ) ) ) ) !== FALSE ) { // NOT FALSE if the script's file name is found in the URL 
  header( 'HTTP/1.0 403 Forbidden' );
  die( '<h2>Direct access to this page is not allowed.</h2>' );
}
/*****************************************************************************/