我读到将包含潜在安全风险内容的 php 文件存储在根目录之外是一种很好的做法。
现在我有 php 文件,其中包含用于处理注册/登录的内容。这些位于根目录之外。现在我通过jquery捕获表单内容并将其发送到这个php文件。
但这似乎在js/jquery中是不可能的:
$.ajax({
type: "POST",
url: "../php_includes/register.inc.php", //beyond root path
data: data,
})
.done(function(data, status) {
//...
});
我是否有设计错误或只是做错了什么?
这里的"最佳实践"解决方案是什么?
"最佳实践"会将入口点的数量减少到 1。而不是index.php
,login.php
和register.php
你只有一个文件handler.php
来处理所有传入的请求(由重写规则辅助)。
handler.php
引导应用程序,并包含确定应如何处理请求的路由信息。应用程序中的模块可以注册路由,这就是激活代码的方式。
您的所有代码都可以存储在 webroot 之外,只公开handler.php
。handler.php
可以像这样简单:
<?php
include(__DIR__ . "/../includes/bootstrap.php");
重写规则以捕获所有请求:
RewriteEngine on
RewriteRule ^(.*)$ handler.php?path=$1 [QSA]
您将
无法从浏览器访问根目录之外的任何文件(即,就像您尝试使用Javascript一样)。将文件存储在根目录之外的全部意义在于客户端无法访问它们。
将注册码放在文档根目录中是必要且安全的。
您宁愿将与安全相关的东西(如配置文件等)存储在外部(不可访问)目录中。但是,如果您需要访问存储在这些文件中的信息,则必须创建一个控制器,该控制器将过滤访问并在需要时以安全的方式提供信息。
Apache 不会提供不在网站根目录中的文件。