2014-09-02 51 views
1

我想允许用户在他们登录后(如在脸书上)编辑其个人档案页面上的项目。让我们打电话给这个页面profile.cfm如何在使用JQuery进行内联页面编辑时保持安全

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

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

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

当然,尽管它们可以启用JavaScript,但并不意味着服务器将接受编辑,因为它进行自己的验证。只是,如果用户没有正确的登录凭据,我宁愿用户甚至没有可视化编辑页面的选项。

这是否只是基于JavaScript的控件的预期折衷方案,它们可能对用户可见(当然恶意修改该页面)将取决于其他变量无法正常工作?

我从一个逻辑/概念点卡住了这个。

+0

你是如何保存这些偏好的? – 2014-09-02 11:33:00

+0

当用户登录时,我将他们的ID存储在会话变量中,例如SESSION.ProfileID。为了确保正确的用户登录,它会像''然后允许用户编辑这个配置文件。 Coldfusion使用单独的模板很容易实现。但它的内联让我感到困惑 – 2014-09-02 12:19:27

回答

-1

对于内联编辑,必须有一些初始化或一些使表单域可编辑的脚本。所以根据条件包含这些脚本。表格示例

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

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

+1

是的,但用户可以轻松启用脚本,无论我是否包含它。在您的示例中,它将忽略脚本部分,这很好,但是...如果用户正确登录到他们自己的配置文件页面,他们将看到该脚本。他们复制脚本,转到不同的配置文件页面,使用Firebug粘贴脚本或其他东西,整个事情再次运作。他们现在可以编辑其他人的个人资料(即使由于服务器验证而无法工作)。我想想,我需要JS来检查它不能做的SESSION变量。 – 2014-09-02 12:21:29

0

如果我是你。我使用ASP.NET C#开发Web应用程序。如果我曾经想拥有的一切对使用JQuery客户端完成,使用Javascript我会做到以下几点:

  • 决定哪些事情我识别客户端登录,我有这些要求是我在客户端也。如他的ID,会话ID,Cookie等。
  • 创建加密技术。
  • 将其写入隐藏字段。
  • 在客户端计算相同的值,然后匹配结果。
  • 如果这等于隐藏字段的值,那么您拥有可信用户。否则不。这可以在小的时间间隔之后反复完成。

例如: 考虑你有你喜欢的个人资料ID,用户名和会话ID。因此,您可以创建一个模式,如说用户名+配置文件ID +会话ID并创建该字符串的散列。 然后在客户端创建相同的。然后验证它。希望有所帮助。

+0

是的,只有使用像ASP.NET或ColdFusion这样的应用服务器语言才有意义。但是一旦ASP.NET成功验证所有内容,就可以进行内联编辑(就像你在Facebook上一样),需要启用javascript代码才能进行内联编辑。 – 2014-09-02 12:27:04

+0

所以你没有任何服务器端应用程序? – FreshDev 2014-09-02 12:58:57

+1

如果您需要从服务器会话中获得配置文件ID,您可以通过让服务器在HTML隐藏字段中写入它的哈希来获得配置文件ID。然后你用你自己生成的当前登录用户的散列读出来。 – FreshDev 2014-09-02 13:01:53

相关问题