• 第二十二章 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>
    
    • 1
    • 2
    • 3

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

    <A HREF='http://myserver/csp/samples/test2.csp'>
            Link to private page - absolute path</A>
    
    • 1
    • 2

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

    私有页面的工作方式如下。负责该页面的子类中的 %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

    元素等组件。

    ENCODED=2 的示例

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

    list.csp 的源

    
    
    Select an account:
    Checking Saving
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    account.csp 的源

    
    
    
    Account Balance: $#(..GetBalance())#
    
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

    
    
    
    Select an account:
    Checking Saving
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    请注意,只有 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,它将忽略未加密的条目。
  • 相关阅读:
    【C++】类和对象(下)
    python使用pandas中的read_csv函数读取csv数据为dataframe、筛选dataframe中的一个数据列的前几行数据
    TypeScript又出新关键字了?
    Python之办公自动化SFTP
    2024年,在风云际会的编程世界里,窥探Java的前世今生,都说它穷途末路,我认为是柳暗花明!
    LeetCode 刷题 -- 139. 单词拆分
    浅谈单元测试 Junit5
    C++每日面试之struct 和 class
    Profinet协议分布式现场总线IO安装教程2
    机器学习:争取被遗忘的权利
  • 原文地址:https://blog.csdn.net/yaoxin521123/article/details/127439269