首页 > 其他分享 >第三十一章 使用 CSP 进行基于标签的开发 - 转义和引用HTTP输出

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

时间:2022-10-30 09:33:27浏览次数:57  
标签:HTTP 转义序列 转义 HTML 第三十一章 CSP 客户端

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

转义和引用HTTP输出

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

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

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

使用EscapeHTML转义HTML

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

#(..EscapeHTML(x))#

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

&lt;mytag&gt;

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

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

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

<input type="BUTTON" value="&lt;ABC&gt;">

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

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

User name: #(user.Name)#

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

Set user.Name = "<input type=button onclick=alert('Ha!');>"

EscapeURL转义URL参数

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

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

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

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

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

QuoteJS转义JavaScript

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

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

<script language="JavaScript">
function showMessage()
{
   alert(#(..QuoteJS(x))#);
}

</script>

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

<script language="JavaScript">
function showMessage()
{
   alert('Don\'t press this button!');
}
</script>

标签:HTTP,转义序列,转义,HTML,第三十一章,CSP,客户端
From: https://www.cnblogs.com/yaoxin521123/p/16840506.html

相关文章

  • CSP - S 2022 游记
    零虽然同样参加了CSP-S2021和CSP-J2020,但是实在是打的太烂了,感觉是没有写游记的脸面。这次的分数就比较正常。这是最后一次了,感觉如果不留下写什么的话,以后就会......
  • CSP-S 2022 游记
    考前准备本来这次考前准备做的挺差的,然后想着反正是寄了,那考多少其实也无所谓,考前也没有太紧张,心态还算好开考前14:20带了几块巧克力进去,结果开考前由于太无聊几乎全吃......
  • CSP2022 游记。
    作为第一次以高中生身份参加csp,虽然有了一定的经验,但还是有点小慌。14:20基本进完场了,考场内回忆了一下tarjan,然后眯眼休息。14:27开考,解压。T1一道图论题,找几个最......
  • [游记]CSP-S第二场
    现役划水?不知道为什么半夜会醒,但既然醒了,就把它写完吧。如果这是NOIP的话,如果NOIP真的没了的话,大概我真的要AFO了。我真的有好好考啊,4个小时没有喝一口水,没有任何走思,没......
  • http
    什么是HTTP首先http是超文本传输协议,用来简历网络连接传递信息的HTTP与HTTPS的区别https与http的区别是,首先http是明文传输的不安全的,http使用了ssl/tcl进行安全加密,htt......
  • CSP2022
    希望别伏笔小插曲:考前2天说取消了,但是过了1天又说恢复。Day0鉴于去年吃了不会网络流的亏,这次把各种算法都看了一遍,但是不想看LCT,如果考了我只能问候出题人的家人。......
  • [CSP-J 2022] 代码
    pow点击查看代码#include<bits/stdc++.h>#definelllonglongusingnamespacestd;lla,b,i,ans;intmain(){ freopen("pow.in","r",stdin); freopen("pow.out"......
  • CSP 2022 游记
    Day-5~0被石门中学邀请集训一周,于是放弃一周文化课。每天上午刷Codeforces,或NOIP真题,晚上打模拟赛,然后CS.感到石门中学简直是度假村一样。本来通知去东莞提前......
  • CSP2022 游记
    Day0吃了个KFCJ组:赛前:J组总得AK掉吧?!赛时:T1,切了。T2,这不解方程吗,不过做得有些复杂,还手写了int128和sqrt,但还是很快切了。T3,大模拟先放一会儿。T4,好水,还不......
  • Http和Https
    Http和Https首先我们介绍一下http和https,http是超文本传输协议,无状态并且是明文传输。https是在http协议的基础上增加了SSL/TLS协议,设备之间的通信是加密的,比Http协议安......