【问题标题】:Security considerations for an ASP.Net web application that will be used on a public computer or kiosk将在公共计算机或信息亭上使用的 ASP.Net Web 应用程序的安全注意事项
【发布时间】:2011-03-24 09:58:06
【问题描述】:

我有一个无需身份验证即可在公共场所的计算机上使用的应用程序。这是一个简单的四页应用程序,允许用户申请结婚证。一些办公室将有一个公共电脑亭,申请人可以在前往文员之前填写自己的信息。他们也可以在访问办公室之前在家里这样做。我应该采取哪些注意事项来确保用户无法访问前一个用户的输入?某些表单数据将包含敏感信息,例如 DOB、SSN 和母亲的娘家姓。

1.禁用自动完成

到目前为止,我已经在我的母版页表单标签中设置了 autocomplete=false。

<form id="frmMain" runat="server" autocomplete="false">

2。禁用页面缓存

我还能够在 IE 和 FF 中禁用页面缓存,但在 Safari 和 Chrome 中无法这样做。有人知道诀窍吗?点击后退按钮仍会在 Safari 和 Chrome 中显示表单填充数据。

// Disables page-caching in IE
Response.Cache.SetAllowResponseInBrowserHistory(false);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Expires = 0;

// HACK: fixes Firefoxes cache issue
Response.AddHeader("ETag", new Random().Next(1111111, 9999999).ToString());

3.管理会话

我还在每个页面上实现了一个计时器,它将在 n 分钟后终止会话。会话保存页面用来加载先前输入的数据的当前应用程序 ID。他们可以通过单击按钮获得更多时间。当计时器到时,它会重定向回我在 Page_Load 中终止会话的主页。当用户单击“完成/提交”按钮时,我也会重定向到此页面。一旦会话被终止,通过 URL 导航到页面将永远不会加载以前的应用程序。它将被视为新的。

protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostBack)
     Session.Abandon();
}

4.我还应该做什么?

Your awesome suggestions/tips here

【问题讨论】:

    标签: asp.net security caching kiosk


    【解决方案1】:

    由于这是一个 Kiosk 应用程序,您需要确保将浏览器配置为支持不缓存任何内容的请求。

    上次我研究服务器端无缓存标头的有效性时,我意识到任何使用定制的、有问题的或不常见的浏览器的人都可能不尊重不缓存文档的请求。

    您可能还想在某些页面(例如会话结束页面)上添加 javascript 后退按钮破坏器和历史导航威慑,但不是所有页面,因为没有人喜欢破坏后退按钮。

    【讨论】:

      【解决方案2】:

      我认为你的想法是正确的。在“完成/提交”上结束会话是我推荐的。仍然阅读owasp top 10 并记住您通常的漏洞。

      1)确保您使用 HTTPS。

      2) 始终始终在推出之前测试您的应用程序是否存在漏洞。我推荐使用Wapiti(free)、Acunetix($) 或 NTOSpider($$$$)。

      3) 使您的服务器保持最新状态,确保您运行OpenVAS 以确保您的服务器是安全的。

      【讨论】:

      • 谢谢鲁克。该应用程序将托管 HTTPS。会话终止运行良好。但是,我对 Chrome 和 Safari 感到非常沮丧,因为我似乎可以阻止页面缓存和保留表单数据。如果窗口关闭并从历史记录访​​问页面,我很酷。但是,如果页面没有关闭并且他们从“后退”按钮抓取页面,则表单值会保持不变。
      • @Jason Butera 您可以在使用 javascript 加载页面时清除所有 &lt;input&gt;
      • 是的,但是允许用户在他/她的会话中重新访问该页面,然后从会话许可证 ID 中加载到 Page_Load 中的数据将被擦除。
      • @Jason Butera,然后添加一个非常简单的 xmlhttprequest 检查会话是否仍然有效。
      • Rook,这正是我们想出的。基本上,将页面最初加载的 sessionID 与现有的进行比较。
      【解决方案3】:

      【讨论】:

      • 谢谢,我读过那篇文章。但我认为公开可用的网站和在公共计算机上可用的网站之间存在明显差异。后者是我比较关心安全问题的地方。
      【解决方案4】:

      使用 JavaScript。您必须捕获并阻止每个表单的 submit 事件,获取数据,通过 ajax 提交,然后使用表单的原生 reset() 方法。从那里您可以导航到其他地方或根据 ajax 结果显示验证错误。使用 jQuery 很容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-02
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多