• 第三十一章 使用 CSP 进行基于标签的开发 - 转义和引用HTTP输出


    第三十一章 使用 CSP 进行基于标签的开发 - 转义和引用HTTP输出

    转义和引用HTTP输出

    要创建HTML中使用的特殊字符的文字显示,必须使用转义序列。
    例如,要在HTML中显示>(右尖括号)字符(它在HTML中具有特殊含义),必须使用字符序列:>对其进行转义。 CSP文档的不同部分可能使用不同的转义规则(例如HTMLJavaScript`)。

    %CSP.Page 提供了许多转义和引用方法:

    • 转义方法接受一个字符串作为输入,并返回一个所有特殊字符都替换为适当转义序列的字符串。
    • 引用方法接受一个字符串作为输入并返回一个带引号的字符串(即带有适当的括引号)。
      加引号的字符串还将所有特殊字符替换为转义序列。
    • 对于每个转义方法,都有一个相应的反转义方法,它将转义序列替换为纯文本。

    使用EscapeHTML转义HTML

    %CSP.Page 可以用相应的HTML转义序列替换字符。

    #(..EscapeHTML(x))#
    
    • 1

    如果x的值,则向HTTP客户端发送以下转义文本:

    <mytag>
    
    • 1

    同样,当你发送HTML属性的值时,转义是必要的:

    <input type="BUTTON" value="#(..EscapeHTML(value))#">
    
    • 1

    如果value的值是,这将导致以下文本被发送到HTTP客户端,其中左右两个尖括号被替换为它们的等效字符序列:<并且>分别是:

    <input type="BUTTON" value="<ABC>">
    
    • 1

    ""(引号)放在#()#指令的两边,使生成的HTML属性值带引号。

    当从数据库向HTTP客户端发送输出时,对其进行转义是一个很好的做法。例如,考虑以下将用户名写入网页的表达式(假设user是对具有name属性的对象的引用):

    User name: #(user.Name)#
    
    • 1

    如果应用程序允许用户将他们的名字输入到数据库中,会发现一个恶意用户可能会输入一个包含HTML命令的名字。如果将下面的内容写到一个没有HTML转义序列的HTTP客户端,该页面可能会出现意外的行为。

    Set user.Name = ""
    
    • 1

    EscapeURL转义URL参数

    URL字符串中的参数值也可以转义。URL使用一组不同于HTML的转义序列。%CSP.Page在一个类EscapeURL方法中用相应的转义序列替换所有特殊的URL参数值处理字符。

    例如,如果CSP文件使用服务器端变量x的值作为URL参数值,则x中的任何字符都可以通过以下表达式进行转义:

    <a href="page2?ZOOM=#(..EscapeURL(x))#">Link</A>
    
    • 1

    如果x的值是100%,那么下面的文本被发送到HTTP客户端。%字符被转义为%25

    <a href="page2?ZOOM=100%25">Link</A>
    
    • 1

    QuoteJS转义JavaScript

    %CSP.Page 类中的提供#(. .QuoteJS(x))#字符串,用它们对应的JavaScript转义序列替换所有特殊字符。

    例如,假设一个CSP文件定义了一个客户端JavaScript函数,该函数在警报框中显示一条消息,该消息由服务器端变量x的值指定。
    x的值被转换成一个JavaScript加引号的字符串:

    <script language="JavaScript">
    function showMessage()
    {
       alert(#(..QuoteJS(x))#);
    }
    
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果x的值是“Don't press this button!”
    ,然后将以下文本发送到HTTP客户端:

    <script language="JavaScript">
    function showMessage()
    {
       alert('Don\'t press this button!');
    }
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    Mybatis中如何在mapper.xml中为date类型作为where条件呢?
    tmux 命令快速入门
    探究Socks5代理和代理IP在技术领域的多重应用
    相比Vue和React,Svelte可能更适合你
    爬虫逆向实战(32)-某号店登录(RSA、补环境、混淆)
    四、通信和网络安全—网络通信基础与网络基础设施(CISSP)
    记一次解决关机蓝屏 | MULTIPLE_IRP_COMPLETE_REQUESTS | klflt.sys
    Web前端:6个最佳在线跨浏览器测试工具(免费和付费)
    生命不息,分享不止,5款小巧的免费软件
    【Java】查找jdk步骤
  • 原文地址:https://blog.csdn.net/yaoxin521123/article/details/127595345