HTTP输出要创建HTML中使用的特殊字符的文字显示,必须使用转义序列。
例如,要在HTML中显示>(右尖括号)字符(它在HTML中具有特殊含义),必须使用字符序列:>对其进行转义。 CSP文档的不同部分可能使用不同的转义规则(例如HTML和JavaScript`)。
%CSP.Page 提供了许多转义和引用方法:
EscapeHTML转义HTML%CSP.Page 可以用相应的HTML转义序列替换字符。
#(..EscapeHTML(x))#
如果x的值,则向HTTP客户端发送以下转义文本:
<mytag>
同样,当你发送HTML属性的值时,转义是必要的:
<input type="BUTTON" value="#(..EscapeHTML(value))#">
如果value的值是,这将导致以下文本被发送到HTTP客户端,其中左右两个尖括号被替换为它们的等效字符序列:<并且>分别是:
<input type="BUTTON" value="<ABC>">
将""(引号)放在#()#指令的两边,使生成的HTML属性值带引号。
当从数据库向HTTP客户端发送输出时,对其进行转义是一个很好的做法。例如,考虑以下将用户名写入网页的表达式(假设user是对具有name属性的对象的引用):
User name: #(user.Name)#
如果应用程序允许用户将他们的名字输入到数据库中,会发现一个恶意用户可能会输入一个包含HTML命令的名字。如果将下面的内容写到一个没有HTML转义序列的HTTP客户端,该页面可能会出现意外的行为。
Set user.Name = ""
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>