perl - 如何防止 CGI Perl 中用户 session 的 session 劫持?

标签 perl session cgi

我有一个供少数人使用的网络应用程序(仅限内部使用),我使用的是存储在用户记录下并放置在各种链接中的随机 sessionID。

我遇到了一个问题,用户互相发送链接,这允许他们劫持发件人的 session 。

有哪些方法可以防止这种情况发生,同时仍允许用户相互发送链接?

编辑: 链接中的 session ID(也包含 $username)只是与 User 表中存储的内容进行比较。 &incorrectLogin 只是打印一个错误,然后是 die;

if ($sid) {

    $sth = $dbh->prepare("SELECT * FROM tbl_User WHERE UserID = '$username'");
    $sth->execute();

    $ref         = $sth->fetchrow_hashref();
    $session_chk = $ref->{'usr_sessionID'};

    unless ($sid eq $session_chk) {

        &incorrectLogin;
    }
}

问题是,如果有人使用由其他人创建的链接,页面将以他们的方式加载。我没有使用 cookie,我记得过去有人告诉我 CGI perl cookie 处理很差。

最佳答案

如果查询字符串包含您用于 session 身份验证的所有信息,那么您将被设计为 hose。您将需要找到某种方法将用户名或 session ID 或两者都放入 cookie 中;否则,您将成为 SOL,因为您无法阻止用户发送的链接包含您的代码用于告知其正在与哪个用户交谈的所有内容。

如果我是你,我会首先查明 CGI.pm 是否像我被告知的那样在 cookie 方面做得很差,如果是这样,我会继续滚动我自己的 Cookie: header 。我能看到的唯一其他替代方法是将应用程序中的所有链接都转换为 POST 请求,这更糟糕,也太可怕了,无法考虑。

关于perl - 如何防止 CGI Perl 中用户 session 的 session 劫持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683469/

相关文章:

perl - 如何在 Perl 语句中获取输入文件的名称?

linux - 没有可用于基本错误的 Presto 元数据下载包 :

php - 在 PHP 上创建团队领导登录 session

javascript - 使用javascript从python CGI返回图像

c++ - C语言写cgi代码

perl 构造函数关键字 'new'

perl - 是否可以只对 Perl 中的子例程调用进行计时?

session - 不需要解锁 session 的 SendKeys 替代方案

java - 为什么 session 不为空

linux - CGI 无法在 ltib linux 2.6.34 上的 busybox 1.15.0 上使用 httpd 服务器(找不到 404 页面)