【问题标题】:preventing unauthorized access to a web application防止未经授权访问 Web 应用程序
【发布时间】:2013-10-15 19:16:08
【问题描述】:

我为我的公司创建了两个 Web 应用程序,我正在检查应用程序每个页面上的用户凭据,我正在使用会话验证用户,我什至在会话中设置了一些值以供在整个应用程序中使用,但现在问题是当我在同一台机器上使用这两个应用程序时,它们的会话相互冲突,并且当我登录到另一个应用程序而第一个应用程序已经启动时,存储到会话中的值也会被覆盖 这是我在会话中检查用户的代码

if(!isset($_SESSION["username"])){
   header("Location: index.php");
}

并且在会话中设置的值是

$_SESSION["zdb"];

还有其他方法可以防止未经授权访问我的应用程序吗?

【问题讨论】:

  • 你有没有学会使用标点符号将文本分成可读的句子?

标签: php session session-variables


【解决方案1】:

例如,您可以使用前缀为会话命名。

应用 1

$sess_prefix = 'app1';
if(!isset($_SESSION[$sess_prefix.".username"])){
   header("Location: index.php");
}

和应用程序 2

$sess_prefix = 'app2';
if(!isset($_SESSION[$sess_prefix.".username"])){
   header("Location: index.php");
}

【讨论】:

  • 我也试过了,效果很好,但我的问题是我正在将一些与数据库相关的信息发送到会话中,例如。 mydatabase
  • 这听起来更像是其他地方的配置问题。如果您的应用程序使用相同的表名,则应确保使用不同的数据库,或为表名添加前缀。
  • 是的,我想在 mysql 查询中使用会话中的数据库名称,甚至不希望它们相互冲突
  • 相应地设置它们有什么问题?数据库名称从何而来?
  • 我有一个组合框,用户可以在登录后从中选择数据库,并将数据库名称存储到会话中
【解决方案2】:

您还可以使用session_set_cookie_params 来定义参数(如路径和域,这些参数应该因您的应用程序而异)。

【讨论】:

    【解决方案3】:

    你好用这种方式确保你必须创建或销毁不同名称的会话。如果您想在同一浏览器中同时使用这两个应用程序。您还可以在应用程序中生成 id(唯一)名称会话。

    【讨论】:

    • 是的,但是如果我在会话中为我的数据库添加前缀,我如何在 mysql 查询中使用它们?
    • 您应该使用不同的数据库名称和会话属性。比如 $_SESSION['appnameUser'] = $userId;
    • 如果您使用 $_SESSION['appnameUser'] 来存储应用程序的当前用户 ID。然后在开始记录时检查 $_SESSION['appnameUser'] 是否具有任何 ID,然后与您的数据库 userId 匹配。在另一个应用程序条件相同但对于不同的会话名称 $_SESSION['secondappUser'] 那么在同一浏览器中使用两个应用程序时它不应该冲突。谢谢
    猜你喜欢
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2012-01-14
    相关资源
    最近更新 更多