Php 动态包含
从代码清理参数的意义上讲,这是安全的。人们经常这样做(通常会造成灾难性的后果) 然而,我不是这个模式的超级粉丝。我指的是一个控制器,它包含传递给参数的文件。我更喜欢每页都有一个脚本,只包含需要的内容。从结构上来说,我认为更好 尽管如此,上述方法从根本上说没有什么错Php 动态包含,php,Php,从代码清理参数的意义上讲,这是安全的。人们经常这样做(通常会造成灾难性的后果) 然而,我不是这个模式的超级粉丝。我指的是一个控制器,它包含传递给参数的文件。我更喜欢每页都有一个脚本,只包含需要的内容。从结构上来说,我认为更好 尽管如此,上述方法从根本上说没有什么错 只要确保你用极端偏执的态度对待来自用户的任何数据。我会更加谨慎地清理这些数据。在include中使用用户输入提供的变量是一个主要的安全缺陷。我会保持原样。您可以创建一个数组,其中GET选项作为键,pages作为值。。然后使用switc
只要确保你用极端偏执的态度对待来自用户的任何数据。我会更加谨慎地清理这些数据。在
include
中使用用户输入提供的变量是一个主要的安全缺陷。我会保持原样。您可以创建一个数组,其中GET选项作为键,pages作为值。。然后使用switch()语句。这将使代码更干净。但正如克莱特斯所说,这并不是制作控制器的最佳方法。因为是您定义了允许包含哪些页面(白名单),所以我看不到任何方法可以毒害$Page
变量。所以这看起来很安全
但您可以使用以下阵列来清理它:
<?php
// Default page
if (!$_SERVER['QUERY_STRING']) $Page = "news";
// View
elseif (isset($_GET['newsID'])) $Page = "newsView";
elseif (isset($_GET['userID'])) $Page = "profile";
elseif (isset($_GET['messageID'])) $Page = "message";
elseif (isset($_GET['threadID'])) $Page = "thread";
elseif (isset($_GET['forumID'])) $Page = "forum";
elseif (isset($_GET['imgID'])) $Page = "imageView";
// Pages
elseif ($_GET['content'] == "search") $Page = "search";
elseif ($_GET['content'] == "gallery") $Page = "gallery";
elseif ($_GET['content'] == "forums") $Page = "forums";
elseif ($_GET['content'] == "messages") $Page = "messages";
many more...
// If page don't exist
else $Page = "error";
// Output page
include($config['PAGE_PATH'].$Page.'.php');
include($config['TEMPLATE_PATH'].$Page.'.html');
?>
但这并不是很干净。请记住(我第一次错过了),第一次检查是针对$\u服务器的,而不是$\u GET。我打算建议使用数组和isset()检查,直到我注意到这一点。
$argToPage = array(
'newsID' => 'newsView',
'userID' => 'profile',
'messageID' => 'message',
'threadID' => 'thread',
'forumID' => 'forum',
'imgID' => 'imageView'
);
$contents = array(
'search',
'gallery',
'forums',
'messages'
);
$Page = null;
if (trim($_SERVER['QUERY_STRING']) == '') {
$Page = 'news';
} else {
foreach ($_GET as $key => $val) {
if (isset($argToPage[$key])) {
$Page = $argToPage[$key];
break;
}
}
}
if (is_null($Page) && isset($_GET['content']) && in_array($_GET['content'], $contents)) {
$Page = $contents[$_GET['content']];
} else {
$Page = 'error';
}