如何正确访问我的PHP文件?直接从JS或通过“;主“;PHP

How do I correctly access my PHP files? Directly from JS or a thru a "master" PHP?

本文关键字:PHP JS 访问 何正确 我的 文件      更新时间:2023-09-26

我不确定我是否完全理解站点安全的这一方面,但似乎将PHP文件保留在根目录下是个坏主意,所以我们将它们移到一个PHP文件夹中,并将此文件夹称为phpIncludes。一些模糊的问题是:

1) 如何访问phpIncludes中的文件doStuff.php?从javascript?让我的javascript告诉敏感内容所在文件夹的名称似乎是个坏主意,如:

 executeAjaxCall("phpFiles/doStuff.php",success,error);

2) 或者来自驻留在根上的"主"PHP?这不能因为是根目录而被篡改吗?

$secretVariableThatOnlyThisPHPWouldKnow="bla"; //then check it in the included file? Does that work?
//in JS 
executeAjaxCall("masterFile.php?fileNeeded=doStuff");
//in PHP
$secretVar="bla";
include("myPathString/phpIncludes/".$_GET['fileNeeded'].".php");
//in all other INCLUDEable PHP files
if (!isset($secretVar))
{ 
    die();
}
if (!isFromThisDomain)
{
    die();
}

(如何执行上次测试?)

我的想法是:"如果有人想把PHP文件放在phpIncludes文件夹中,他们不能,但他们可以通过HTML访问它们,所以请求需要验证。如果没有会话,比如在master.PHP中生成doStuff.PHP可以识别的东西,从而完成它的工作,这很容易实现吗?还是会话是最好的方法?"事实上,我想知道"无会话"的情况,因为这让我摆脱了试图实现反会话劫持代码的任务(如果我学会了……)。另一方面,我也在想:"变量secretVar是可访问/可篡改的吗?因为它将在根上?"

3) 按(2)操作,但在另一个文件夹中有master.php(让我们称之为"master"),使其成为非root?在这种情况下,我是否使用getcwd()+字符串操作从主文件夹访问phpIncludes文件夹?还是有一种"更优雅"(更懒…)的方法?

3似乎很神奇,我在root上的唯一文件是index.php,它只是启动HTML+JS,不做任何敏感的事情。还是我错过了什么?

你的PHP文件和文件夹结构是完全无关的。唯一重要的是:

当您访问特定的URL时会发生什么

phpFiles/doStuff.php首先是URL。你如何访问它并不重要("直接"通过浏览器地址栏、AJAX、curl或其他任何方式);重要的是当访问该URL时会发生什么。这完全取决于你来确保每次访问URL都不会发生任何不希望发生的事情。

  1. 不要公开任何本来就不应该存在的URL。如果你有一堆php文件,它们不打算通过URL直接访问,那么就不要公开它们。这意味着您可以通过web服务器配置阻止对它们的访问(例如.htaccess文件中的deny all),也可以从公共webroot中删除这些文件
  2. 根据需要验证所有公开的URL端点中的所有输入和必要条件。用户需要登录才能执行某些操作?验证。您需要某些查询参数或POST正文数据吗?验证。在做任何事情之前,根据每个传入请求的优点对其进行验证。您是在每个文件中单独重复这个验证代码,还是在某个集中的地方重复,这取决于您自己
  3. 根据需要将代码拆分到多个文件中,以使其可重用。参见第1点。和2.,您只需注意哪些文件被公开为URL入口点,以及在什么时候需要进行什么样的验证