儘管我努力尋找關於如何爲使用PHP構建的Web應用程序設置安全的單一入口點體系結構的教程,但我一直無法找到一個好的教程。誰知道,也許我的搜索查詢不好... 看着Laravel的代碼似乎是一個好主意,但它是讓您的頭部旋轉的好方法。這裏有太多的東西讓我理解。如何設置一個類似於Laravel的單入口點體系結構?
這就是說,我將如何去創建這樣一種既簡單適用於應用程序又能夠同時保護(例如,防範本地文件包含)的體系結構?
儘管我努力尋找關於如何爲使用PHP構建的Web應用程序設置安全的單一入口點體系結構的教程,但我一直無法找到一個好的教程。誰知道,也許我的搜索查詢不好... 看着Laravel的代碼似乎是一個好主意,但它是讓您的頭部旋轉的好方法。這裏有太多的東西讓我理解。如何設置一個類似於Laravel的單入口點體系結構?
這就是說,我將如何去創建這樣一種既簡單適用於應用程序又能夠同時保護(例如,防範本地文件包含)的體系結構?
首先,您需要將所有請求重定向到一個PHP文件。你在.htaccess在Apache上做的那部分或它在其他服務器上的對應部分。
然後,您需要了解您可以在$_SERVER
中看到哪些數據。使用$_SERVER['PATH_INFO']
相當常見,但是選擇取決於您重寫請求的方式。
然後,您需要創建一個路由器,該路由器有一個正則表達式列表,並嘗試與您已獲取的URL片段匹配。
這裏有可能給你一些想法幾個例子:
'#^/(?P<page>[^/\\\\.,;?\n]+)$#'
'#^/user/(?P<id>[0-9]+)/(?P<nickname>[^/\.,;?\n]+)$#'
'#^(?:/test/(?P<parameter>[^/\\\\.,;?\n]+))?/mandatory$#'
通常的做法是壽已經從更簡單的符號產生這些正則表達式,但對於第一次迭代,你不應該過多地關注它。另外,如果您使用具有可選片段的表達式,則還應該提供「後備」值。如果未提供片段,則會將這些值用作默認值,但匹配模式。
我做這一切的方式看起來像這樣在PHP:
/*
* Routing mechanism
*/
$uri = isset($_SERVER[ 'PATH_INFO' ])
? $_SERVER[ 'PATH_INFO' ]
: '/';
$builder = new RequestBuilder;
$request = $builder->create();
$request->setUri($uri);
$router = new Router(new RouteBuilder);
$router->import(
$reader->getAsArray(__DIR__ . '/config/routes.json')
);
$router->route($request);
在此之後,$request
變量包含一個對象,然後您可以查詢像$id = $request->getParameter('id')
或$controller = $request->getParameter('controller')
具體使用參數的命令。
如果你自己並沒有搞亂模式,那麼你提取的值將是安全的,以防止未經授權的文件包含。
您正在尋找一個'Front Controller',它至少能夠完成您想要的操作。 – Yang