【问题标题】:Manage web application security on shared computers and kiosks管理共享计算机和信息亭上的 Web 应用程序安全性
【发布时间】:2013-05-02 06:02:24
【问题描述】:

我们有一个可公开访问的网络应用程序。 当用户登录时,他会填写他的个人详细信息。

问题 用户可能会忘记在信息亭或共享环境中关闭浏览器,从而可能让其他用户看到他的个人信息。

我们使用 5 分钟的会话超时,

我的想法 为 Kiosks 环境构建一个单独的应用程序是否更好,我可以在其中询问用户这是共享计算机还是公共计算机。如果是,我将如何进一步实施?

对于每 3 分钟不活动,我们要提示用户:“您要继续吗?”如果是,请确认密码,以使其更安全。

我看过下面的链接 Security considerations for an ASP.Net web application that will be used on a public computer or kiosk

您能否就这个问题分享更多想法:如何使其更安全。

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • @JohnSaunders:我需要你的help :)
  • 我认为这个问题不适合 SO。这并不是一个真正的特定编程问题,而是对设计建议的模糊调查。似乎您真正需要的是更详细地确定安全要求。专注于如何实现这些要求,并询问在执行过程中遇到的问题。
  • 这个问题使用远程网络软件很难解决。您是否能够设计或控制信息亭本身?如果没有,您能否影响自助服务终端服务员的培训和实践?
  • 马修,我会更准确地说明我们正在使用 DotnetNuke 的问题,在每个页面上,如果有大约 3 分钟的活动,我想向用户显示警报并重定向以确认密码页。我可以在 JavaScript 中执行此操作,还是可以在服务器端实现它。请您提供任何参考资料。

标签: asp.net


【解决方案1】:

您将不得不使用某种 JavaScript。如果没有某种客户端脚本(显然是 JavaScript)来处理请求,服务器就无法更新客户端网页。我做过类似的事情,询问用户是否想通过显示弹出消息来保持会话活跃。但是在您的情况下,您似乎应该为重新登录创建一个 DNN 页面,并将一个带有简单 JavaScript 的自定义模块或 HTML 块添加到您要检查登录的每个页面(或将其放在模板页眉或页脚中)它将用户重定向到重新登录屏幕。比如:

function setHeartbeat() {
    setTimeout("heartbeat()", 300000); // every 5 min
}

function heartbeat() {
    window.location.href = "Relogin.aspx?LastPage=" + window.location.href;
}

然后Relogin.aspx会在顶部出现用户空闲3分钟的消息,并提供密码框。用户登录后,您可以将它们重定向回 LastPage(自从我使用 DNN 以来一直很麻烦,但我认为有一种方法可以格式化 URL,以便它自动重定向)。

一个对用户更友好的选项是在 3 分钟后显示一个弹出窗口,显示带有确定按钮的消息和密码字段。同样,这可以用 jQuery 来完成,你有类似的东西:

<div id="confirmSession" style="display: none">
<p class="message" style="display: none;"></p>
<p>You have been idle for 3 minutes, if you want to continue your session please re-enter your password.</p>
<p>Password: <input type="password" id="password" /></p>
<input type="button" id="btnContinueSession" />
<input type="hidden" id="userName" value='<%# HttpContext.Current.User.Principal.Identity %>' />
</div>

以及以下 JavaScript:

function setHeartbeat() {
    setTimeout("heartbeat()", 300000); // every 5 min
}

function heartbeat() {
    $("#confirmSession").show();
}

$("#btnContinueSession").click(function () {
    $.ajax({
    type: "post",
    url: "/relogin.aspx",

    error: function(returnval) {
        // Login failed for some reason, typically page not available 404 error, or code threw an error. so have the user try again.
        $(".message").text(returnval + " failure");
        $(".message").show();
    },
    success: function (returnval) {
        $("#confirmSession").hide();
        setHeartbeat();
    }
    });
});

在这里,您必须创建一个 relogin.aspx 页面或其他一些服务,它将接收用户名和密码,重新验证用户,然后如果密码无效则抛出错误(在上面的 jQuery 中捕获)并显示给用户)。这显然需要更多的工作,并且需要自定义编码来进行验证,而不是简单地重定向到登录屏幕,但它对用户更友好。

在这种 Ajax 方法中,值得注意的是,您的服务器会话超时可能必须超过 3 分钟。如果在三分钟或更短的时间内,用户输入了他们的密码,他们将已经从服务器中注销,并且您将收到一个无效的身份验证错误。所以整体重定向到登录页面可能是最有意义的。但是您需要确保如果用户输入了您将其保存在 cookie 中或以某种方式保存的数据,以便您可以重新填充它(我听说过数百人对他们的数据“丢失”感到沮丧")。

我的例子是:

【讨论】:

  • 感谢您的宝贵意见,这对我有帮助,还有一个问题是浏览器后退按钮上的每个页面单击我必须创建一个自定义页面过期页面,我的疑问是我将在哪里编写此代码, ,我应该在每个模块中都写,因为 dotnetnuke 没有母版页。在这个自定义页面上,我将有一个链接将他再次重定向到登录页面
  • 对于自助服务终端,我建议禁用右键菜单并且根本不显示浏览器栏,这样用户就很难返回。话虽如此,我建议您使用 jQuery 插件并将其放入包含在每个页面上的 javascript 文件中(因此,请将 javascript 包含在您的顶部导航栏中,以便它在网站上随处可见)。
  • 查看这篇 StackOverflow 文章,了解有关如何覆盖后退按钮的一些想法:stackoverflow.com/questions/1844491/…
猜你喜欢
  • 2011-03-24
  • 2011-02-19
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 2013-03-20
  • 1970-01-01
  • 2011-05-25
相关资源
最近更新 更多