Javascript 通过jquery ajax请求访问根目录外的php文件

Javascript 通过jquery ajax请求访问根目录外的php文件,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我读到,将包含潜在安全风险内容的php文件存储在根目录之外是一种很好的做法 现在我有了php文件,其中包含用于处理注册/登录的内容。这些在根目录之外。 现在,我通过jquery捕获表单内容并将其发送到此php文件 但这在js/jquery中似乎是不可能的: $.ajax({ type: "POST", url: "../php_includes/register.inc.php", //beyond root path data: data, }) .do

我读到,将包含潜在安全风险内容的php文件存储在根目录之外是一种很好的做法

现在我有了php文件,其中包含用于处理注册/登录的内容。这些在根目录之外。 现在,我通过jquery捕获表单内容并将其发送到此php文件

但这在js/jquery中似乎是不可能的:

$.ajax({
    type: "POST",
    url: "../php_includes/register.inc.php", //beyond root path
    data: data,
    })
    .done(function(data, status) {
            //...
    });
我是否有设计错误或只是做错了什么


这里的“最佳实践”解决方案是什么?

您将无法从浏览器访问根目录之外的任何文件(例如,就像您尝试使用Javascript一样)。将文件存储在根目录之外的整个意义在于,客户端无法访问这些文件


将注册码放在文档根目录中是必要且足够安全的。

您更愿意将配置文件等安全相关内容存储在外部(不可访问)目录中。但是,如果需要访问存储在这些文件中的信息,则必须创建一个控制器,该控制器将过滤访问,并在需要时以安全的方式提供信息

Apache不会提供不在网站根目录中的文件。

最佳做法将把入口点的数量减少到1个。与拥有
index.php
login.php
register.php
不同,您只有一个文件
handler.php
,用于处理所有传入请求(由重写规则辅助)

handler.php
引导您的应用程序,并包含确定如何处理请求的路由信息。应用程序中的模块可以注册路由,这就是代码被激活的方式

您的所有代码都可以存储在webroot之外,只有
handler.php
是公开的。而
handler.php
可以简单到:

<?php
include(__DIR__ . "/../includes/bootstrap.php");

因此,在根目录中存储包含DB连接(更新/插入等)内容的php文件不存在安全风险?我不是这么说的-尽管如果服务器环境配置正确,这样做不一定会有风险。您需要在注册码中包含数据库连接信息的原因是什么?将注册码指向文档根目录中。让注册码指向文档根目录之外的数据库连接信息。当然,我的数据库连接信息不直接在注册码中。我将它包含在根路径之外的文件中。所以问得更正确一些:在根目录中使用mysql查询的php文件不是安全风险吗?@RafaelWörner从技术上讲,这是配置文件的风险。如果您的文件只包含不应该构成风险的SQL查询(除非敏感信息是硬编码的)。@RafaelWörner这是正确的。在根路径中使用SQL查询可能不会带来安全风险。完整地说,一个“不错”的例子是Symfony框架的实现,它正好做到了这一点(这不是唯一一个实现这一点的框架,只是第一个想到的框架)。这是一个更好的方法,尽管设置起来要困难得多,答案比我的多。谢谢分享。如果可以接受两个不同的答案,我也会接受你的答案。JSK NS的答案对我来说几乎是最好的。在理解之前不要遵循某个实践。可能更重要的是:在理解基本的安全最佳实践之前不要处理用户登录信息。@SalmanA如果你想成为一名优秀的程序员,你应该试着理解你遵循的每一个实践,但我宁愿我的团队中的程序员遵循最佳实践,不管他们是否理解为什么它们是好的。我遇到过太多这样的情况:我和一个程序员一起工作,他拒绝遵循长期以来确立的最佳实践,因为他个人看不到它的价值,而且太固执而无法学习。
RewriteEngine on
RewriteRule ^(.*)$ handler.php?path=$1 [QSA]