【问题标题】:Include safety包括安全
【发布时间】:2009-02-11 13:11:49
【问题描述】:
<?php
if (preg_match('/^[a-z0-9]+$/', $_GET['page'])) {
$page = realpath('includes/'.$_GET['page'].'.php');
$tpl = realpath('templates/'.$_GET['page'].'.html');
if ($page && $tpl) {
    include $page;
    include $tpl;
} else {
    // log error!
}
} else {
// log error!
}
?>

您认为这有多安全? Gumbo 在 Stack Overflow 上写了它。
Dynamic Include Safety

我想听听你的意见。

干杯

【问题讨论】:

    标签: php include


    【解决方案1】:

    我首先想到的不是安全,而是你为什么要这样做?

    【讨论】:

    • 我在工作中的项目中使用了这种类型的包含结构。使添加老板想要的新页面更容易。
    • 相当草率的实现。
    【解决方案2】:

    我会说这很安全。只是不允许任何内容写入这些文件夹。 PHP 文件传统上位于服务器的 Web 根目录中,这很危险。考虑到配置错误或 .htaccess 文件丢失,最好将正在加载的文件放置到外部绝对无法访问的区域。

    【讨论】:

      【解决方案3】:

      你包括你自己的代码。它有多安全?

      【讨论】:

        【解决方案4】:

        我可以在那里看到一些潜在的问题,特别是如果“页面”变量包含“..”或其他可能让他们看到他们不应该看到的东西的东西。

        我在我的几个网站上做了类似的事情,但我会首先检查“页面”以确保它引用一组允许的页面中的一个。

        【讨论】:

        • SilentGhost 所说的。 preg_match 仅匹配字母数字字符。除了指定的范围之外,不能添加任何类型的字符。
        • 也许 '..' 是一个不好的例子 - 但仍然有很多事情可能出错 - 一个指向另一个目录的符号链接,有人在没有意识到的情况下将一些东西放在 '/includes' 中后果等。
        猜你喜欢
        • 2010-10-06
        • 1970-01-01
        • 2018-01-07
        • 1970-01-01
        • 2014-04-11
        • 2011-08-09
        • 2018-01-06
        • 2014-07-29
        • 1970-01-01
        相关资源
        最近更新 更多