Cookies - 超时和配置

PHP-Nuke 大量使用 cookies,无论是用于用户身份验证,还是管理员身份验证。Cookies 是保存在我们计算机上的文本文件,其中包含各种信息,这些信息在我们访问特定网站时会被读取。对于 PHP-Nuke 而言,保存在 cookie 中的信息与用户、所选主题和使用的语言有关。

Cookie 也是使我们不必每次登录都重新输入密码的工具。这样,每次我们访问 PHP-Nuke 站点时,cookie 都会为我们工作,管理登录操作。

问题在于,如果 cookie 没有足够低的过期日期,有人可能会从我们这里窃取它,并能够以用户或管理员的身份访问该站点。 这在一系列原因下是可能的

  1. PHP-Nuke 的 cookie 的生命周期接近无限(31536000 秒)

  2. Explorer(最常用的浏览器,不幸的是)存在漏洞,允许在客户端执行恶意脚本,这些脚本“窃取”用户的 cookie 并将其发送给“窃贼”。

  3. PHP-Nuke 无法成功过滤所有恶意脚本(或者,更确切地说,Internet Explorer 非常愚蠢,以至于会更正语法错误的插入脚本,以便不被识别)。

让我们展示一个具体的例子,说明一个脚本小子(那些自认为是黑客,但实际上不是的人...)如何尝试获得我们站点的管理员权限

  1. 脚本小子插入一个据称包含新闻的脚本

    < vb script give the cookie to me and send it to the server xyz>

    该脚本未被 PHP-Nuke 的 function check_words() 函数过滤。

  2. PHP-Nuke 的管理员使用 Internet Explorer 打开页面!!!(如果您使用 Mozilla,或者更好的是任何 Linux 浏览器,则此黑客攻击无效)。管理员可以看到等待批准发布的新闻列表。当他查看提交内容时,Internet Explorer(愚蠢地)以这种方式更正 vbscript

    <vbscript>(script kiddies commands go here)

    成功地以正确的方式解释了错误的语法(!!!),获取了 cookie 并将其发送给脚本小子。

  3. 脚本小子将 cookie 放在他自己的其他 cookie 中,连接到站点,然后... 被识别为管理员!!!

但是如何保护自己免受此类黑客攻击呢?

有一些解决方案应该大大提高我们管理区域的安全性

  1. 首先,停止使用 Internet Explorer 作为浏览器,并将位置让给 Mozilla。Mozilla 是一款浏览器,可以以最佳方式支持所有站点,并且没有 Microsoft 的所有漏洞。如果您改用 Linux,您将不会遇到任何此类问题...

    1. 如果您想继续使用 Explorer,您至少应该从 Microsoft 下载补丁。

  2. 尽可能禁用 HTML 标签的插入(例如在 Splatt.it 论坛中)

  3. 缩小 cookie 的生命周期。例如,如果我们将 cookie 的生命周期设置为两小时,脚本小子将被迫在该时间段内使用 cookie,这大大限制了他们及时采取行动的能力。

    相反,如果我们让 cookie 的生命周期保持其预设值,脚本小子甚至可以在 cookie 被盗后 1 个月内使用我们的 cookie。

    如何设置管理员 cookie 的持续时间?cookie 在文件 includes/auth.php 中设置,修改它的函数如下

    if ((isset($aid)) && (isset($pwd)) && ($op == "login")) {
        if($aid! = "" AND $pwd!="") {
            $pwd = md5($pwd);
            $result=sql_query("select pwd, admlanguage from "$prefix."_authors  where aid='$aid'", $dbi);
            list($pass, $admlanguage)=sql_fetch_row($result, $dbi);
            if($pass == $pwd) {
                $admin = base64_encode("$aid:$pwd:$admlanguage");
                setcookie("admin", "$admin",time()+7200);
                unset($op);
            }
        }
    }

    如您所见,我们将第二个 cookie 的生命周期从 2592000 秒(一个月)修改为 7200 秒(两小时)。正如您很容易看到的,我们将脚本小子的活动半径从一个月缩小到两个小时。

  4. 一种更有效的标签过滤器正在研究阶段,尽管目前,提出的解决方案确实为问题提供了明确的答案。允许的标签在文件 config.php 中的变量 $AllowableHTML 中定义,这些标签对于评论和在函数 check_html() 中插入新闻有效,该函数目前允许一些标签通过。

所有这些操作以及在 文件夹和文件的权限 部分中说明的正确权限配置应该保证我们站点的良好安全性。密切关注 http://neworder.box.sk/ 上提出的 PHP-Nuke 安全警告也很重要。