第二十二章 CSP Session 管理 - Private Pages

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 第二十二章 CSP Session 管理 - Private Pages

第二十二章 CSP Session 管理 - Private Pages

CSP 提供了私有页面的概念。只能从同一 CSP 会话中的另一个页面导航到私有页面。私有页面对于想要限制对某些页面的访问的应用程序很有用。

例如,假设有一个名为 private.csp 的私有页面(CSP 示例页面之一)。用户无法直接导航到 private.csp(例如,通过输入其 URL)。用户只能从另一个 CSP 页面中包含的链接导航到 private.csp。引用 CSP 页面中包含的链接不能是绝对 URL,以 http:// 开头。只有相对于引用页面的路径才被私有页面方法正确加密/标记。即:下面的前两个链接将相同的令牌传递给目标私有页面 test2.csp

<A HREF='test2.csp'>Link to private page - relative path</A> <BR>
<A HREF='/csp/samples/test2.csp'>
       Link to private page - full application path</A> <BR>
复制代码

此链接的散列方式不同,无法访问。

<A HREF='http://myserver/csp/samples/test2.csp'>
        Link to private page - absolute path</A>
复制代码

用户也不能为私有页面添加书签以供以后使用,因为用于保护私有页面的加密令牌仅对当前会话有效。

私有页面的工作方式如下。负责该页面的子类中的 %CSP.Page 将其类参数 PRIVATE 设置为 1。请求此页面的 URL 必须在其查询字符串中包含有效的加密 CSPToken 值。 CSP 处理的任何指向此页面的链接都会自动具有加密的 CSPToken 值。

编码 URL 参数

以类似于私有页面的方式,可以通过在类参数 ENCODED 中设置 %CSP.Page 的值来指定要对 CSP 页面的 URL 参数进行编码。 ENCODED 可以设置为 012。任何指向 ENCODED 类参数为 12 的页面的链接都会自动将任何 URL 参数编码在加密的 CSPToken 值中。如果 ENCODED 设置为 2,则必须对值进行编码;如果为 1,则可以混合编码值和未编码值。

ENCRYPTED 的三个设置是:

  • ENCODED=0 — 查询参数未加密
  • ENCODED=1 — 查询参数被加密并在 CSPToken 内传递
  • ENCODED=2 — 与“1”相同,除了在调用 Page 方法之前从 %request 对象中删除任何未加密的参数。这可确保在对象中的 %CSP.Request中只有加密参数可用。

请注意,因为 ENCODED=2 会从 url 中删除未加密的参数,所以它可以禁用 Zen <form> 元素等组件。

ENCODED=2 的示例

例如,假设有两个 .csp 页。一个页面 (list.csp) 将银行帐户列表显示为超链接,第二个页面 (account.csp) 显示有关特定帐户的信息。 account.csp 需要一个名为 ACCOUNTIDURL 参数来确定要显示的帐户。我们不希望在客户端上发布帐号,也不希望未经授权访问 account.csp 或显示任何其他帐号的能力。我们可以通过将 account.csp ENCODED 参数设置为 2 来做到这一点。以下是相关的 .csp 文件:

list.csp 的源

<html>
<body>
Select an account:<br>
<a href="account.csp?ACCOUNTID=100">Checking</a>
<a href="account.csp?ACCOUNTID=105">Saving</a>
</body>
</html>
复制代码

account.csp 的源

<html>
<csp:class private=1 encoded=2>
<body>
Account Balance: <b>$#(..GetBalance())#</b>
</body>
<script language="Cache" method="GetBalance" arguments=""
        returntype="%Integer">
    // server-side method to lookup account balance
    New id
    Set id = $Get(%request.Data("ACCOUNTID",1))
    If (id = 100) {
        Quit 157
    }
    ElseIf (id = 105) {
        Quit 11987
    }
    Quit 0
</script>
</html>
复制代码

当请求 list.csp 时,CSP 服务器将以下 HTML 发送到客户端:

<html>
<body>
Select an account:<br>
<a href="account.csp?CSPToken=fSVnWw0jKIs">Checking</a>
<a href="account.csp?CSPToken=1tLL6NKgysXi">Saving</a>
</body>
</html>
复制代码

请注意,只有 ACCOUNTID 的加密值被发送到客户端。

在处理 account.csp 时,它会看到 ACCOUNTID 的解密值(在其 GetBalance 方法中引用)。

ENCODED=1 的示例

ENCODED=2ENCODED=1 之间的区别在于,如果 ENCODED=2,任何以未加密形式添加到 URL 的文本都会被丢弃。如果使用 ENCODED=1,则未加密的文本将传递到页面。然后,该页面可以包含指定如何处理此未加密文本的代码。

示例页面 protected.cspprotectedentry.csp显示了使用 ENCODED=1 的示例。 protected.csp 的源显示它检查是否已将任何内容添加到未加密的 URL。如果有任何未加密的内容,页面会显示一个滚动字幕,上面写着 HACKER ALERT!

要查看此内容,请转到示例页面在打开。

  1. 双击 protectedentry.csp 在新选项卡中打开。
  2. BALANCE:字段中输入 500
  3. 点击查看余额
  4. protected.csp 页面显示帐户余额为:500
  5. 请注意,该 URL 包含一个加密的 CSPTokenCSPTaken= 之后的所有内容)。这是输入的 500 加密。
  6. 导航到此 URL 的末尾并输入 &BALANCE=8000 并按 Enter
  7. 显示受保护的.csp 页面。它接受了对 URL 的未加密添加,并通过显示 HACKER ALERT!选框。如果 ENCODED 设置为 2,它将忽略未加密的条目。
相关文章
|
存储 安全 Go
第十九章 CSP Session 管理 - %CSP.Session 对象
第十九章 CSP Session 管理 - %CSP.Session 对象
115 0
第十九章 CSP Session 管理 - %CSP.Session 对象
|
存储 Go 数据安全/隐私保护
第二十五章 CSP Session 管理 - 选择策略时的注意事项
第二十五章 CSP Session 管理 - 选择策略时的注意事项
98 0
|
安全 Go API
第二十四章 CSP Session 管理 - 认证架构
第二十四章 CSP Session 管理 - 认证架构
107 0
|
安全 Go API
第二十三章 CSP Session 管理 - 身份验证共享策略
第二十三章 CSP Session 管理 - 身份验证共享策略
82 0
|
安全 JavaScript 前端开发
第二十一章 CSP Session 管理 - 身份验证和加密
第二十一章 CSP Session 管理 - 身份验证和加密
128 0
|
存储 Go 数据库
第二十章 CSP Session 管理 - 状态管理
第二十章 CSP Session 管理 - 状态管理
108 0
|
存储 安全 Go
第十八章 CSP Session 管理 - 与 CSP.Session 的Sessions
第十八章 CSP Session 管理 - 与 CSP.Session 的Sessions
106 0
第五十二章 开发自定义标签 - Using csr %CSP.AbstractAtom Write Methods
第五十二章 开发自定义标签 - Using csr %CSP.AbstractAtom Write Methods
78 0
|
JavaScript 编译器 Go
第五十一章 开发自定义标签 - 使用%CSP.Rule方法
第五十一章 开发自定义标签 - 使用%CSP.Rule方法
88 0
|
SQL JavaScript 前端开发
第三十六章 使用 CSP 进行基于标签的开发 - 使用尽可能少的#server和#call调用
第三十六章 使用 CSP 进行基于标签的开发 - 使用尽可能少的#server和#call调用
136 0