【问题标题】:How to maintain security when using JQuery for inline page editing (edit-in-place)使用 JQuery 进行内联页面编辑时如何保持安全性(就地编辑)
【发布时间】:2014-09-02 11:19:47
【问题描述】:

我希望允许用户在登录后(例如在 facebook 上)在他们的个人资料页面上编辑项目。让我们将此页面称为profile.cfm

我很困惑如何允许页面的内联编辑(即,用表单输入替换页面元素,以便用户可以就地编辑内容)只有当用户登录并且他们的凭据与他们的页面匹配时想要编辑。

传统上,我会有一个单独的页面来编辑像profile-edit.cfm 这样的个人资料。在这个页面上,我会检查他们想要编辑的配置文件的 ID 是否与存储在他们的 Session 变量中的 ID 相同。如果一切都匹配,则页面将显示。否则会失败。

但是,对于 JS 内联编辑,没有单独的编辑页面来处理安全检查。那么如何才能只有在正确的用户登录时才能启用 JS 编辑功能呢?我当然不希望用户修改其他人的个人资料。仅仅基于登录凭据禁用/启用内联编辑 Javascript 代码是不够的,因为可以使用 Firebug 等轻松将其重新打开。

当然,即使他们可以启用 javascript 并不意味着服务器会接受编辑,因为它会进行自己的验证。只是我宁愿用户在没有正确登录凭据的情况下甚至无法在视觉上编辑页面。

这是否只是基于 javascript 的控件的预期权衡,因为它们可能对用户可见(当然是恶意修改页面)将无法正常工作,具体取决于其他变量?

从逻辑/概念的角度来看,我一直坚持这一点。

【问题讨论】:

  • 您如何存储这些首选项?
  • 当用户登录时,我将他们的 ID 存储在会话变量中,例如会话.配置文件ID。为了确保正确的人登录,它将类似于<cfif structkeyexists(Session, 'ProfileID') and Session.ProfileID EQ URL.ProfileID>,然后允许用户编辑此配置文件。这可以通过使用单独模板的 Coldfusion 轻松实现。但它的内联操作让我感到困惑

标签: javascript jquery coldfusion coldfusion-10


【解决方案1】:

如果我是你。我使用 ASP.NET C# 来开发 Web 应用程序。如果我希望使用 JQuery、Javascript 在客户端完成所有操作,我会执行以下操作:

  • 确定哪些东西可以识别我的客户端登录,我在客户端也可以使用这些东西。比如他的ID、Session ID、Cookie等。
  • 创建加密技术。
  • 将其写入隐藏字段。
  • 在客户端计算相同,然后匹配结果。
  • 如果这等于隐藏字段的值,您就有一个真实的用户。否则没有。这可以在很短的时间间隔后一遍又一遍地完成。

示例: 考虑一下您的个人资料 ID、用户名和会话 ID。因此,您可以创建一个模式,例如用户名+个人资料 ID+会话 ID,并创建该字符串的哈希值。 然后在客户端创建相同的。然后验证它。希望对您有所帮助。

【讨论】:

  • 是的,当只使用像 ASP.NET 或 ColdFusion 这样的应用服务器语言时,这很有意义。但是使用内联编辑(就像你在 facebook 上一样)一旦 ASP.NET 成功验证了所有内容,就需要启用 javascript 代码以允许内联编辑。
  • 所以你没有任何服务器端应用程序?
  • 如果您需要从服务器会话中获取配置文件 ID,您可以通过让服务器将其哈希值写入 HTML 隐藏字段中来获得。然后您稍后会使用您自己生成的当前登录用户的哈希值来读取它。
【解决方案2】:

对于内联编辑,必须有一些初始化或一些脚本使表单字段可编辑。因此,根据条件包含这些脚本。表单示例

If(session[ID] == Profile ID){
   <script type="text">
       Add all your scripts which will allow inline editing.
   </script>
}

如果条件不满足,则不会包含脚本,因此表单字段将不可编辑。 希望这会有所帮助。

【讨论】:

  • 是的,但是无论我是否包含它,用户都可以轻松启用脚本。在您的示例中,它忽略了脚本部分,这很好,但是......如果用户正确登录到他们自己的个人资料页面,他们将看到脚本。他们复制脚本,转到不同的个人资料页面,使用 Firebug 或其他工具将脚本粘贴到其中,然后整个过程再次运行。他们现在可以编辑其他人的个人资料(即使由于服务器验证而无法使用)。我想考虑一下,我需要JS来检查它不能做的SESSION变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
相关资源
最近更新 更多