我读到了将根据目录中包含潜在安全风险的php文件存储起来的良好做法。
现在我有php文件包含用于处理注册/登录的东西。那些在根目录之外。 现在我通过jquery捕获表单内容并将其发送到此php文件。
但是这似乎不可能用js / jquery:
$.ajax({
type: "POST",
url: "../php_includes/register.inc.php", //beyond root path
data: data,
})
.done(function(data, status) {
//...
});
我是否有设计错误或只是做错了什么?
什么是最佳实践"解决方案在这里?
答案 0 :(得分:8)
“最佳做法”会将入口点的数量减少到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]
答案 1 :(得分:3)
您无法从浏览器访问根目录之外的任何文件(例如,您正在尝试使用Javascript)。将文件存储在根目录之外的全部内容是客户端无法访问它们。
将注册码放在文档根目录中是必要且安全的。
答案 2 :(得分:2)
您宁愿将与安全相关的内容(如配置文件等)存储在外部(不可访问)目录中。但是,如果您需要访问存储在这些文件中的信息,则必须创建一个控制器,该控制器将过滤访问并在必要时以安全的方式提供信息。
Apache不会提供不在网站根目录中的文件。