Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1198916
  • 博文数量: 272
  • 博客积分: 3899
  • 博客等级: 中校
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-15 14:53
文章分类

全部博文(272)

文章存档

2012年(272)

分类: 网络与安全

2012-06-26 11:33:13

接着前两天谈到的关于 HtmlEncode 的问题,再补充两点。

首先我们把输出区分为 在 Html 里的输出 在 Html Attribute 里的输出, 在 Script (或者是 Element Event)里的输出。

前两种纯粹在 Html 里的输出,使用安全的 HtmlEncode 即可。Html Attibute 里的输出与前者大同小异。

在script 里的输出的时候,为了不影响script 的可用性,最好不要直接HTMLEncode.

对于一个string,应该按照如下方法,转义这些字符

CharacterMeaning
\bBackspace
\fForm feed
\nNew line
\rCarriage return
\tTab
\'Single quote or apostrophe (')
\"Double quote (")
\\Backslash (\)
\XXXXXX is an octal number (between 0 and 377) that represent the Latin-1 character equivalent. For example \251 is the octal code for the copyright symbol.
\xXXXX is a hexadecimal number (between 00 and FF) that represent the Latin-1 character equivalent. For example \xA9 is the hexadecimal code for the copyright symbol.
\uXXXXXXXX is a hexadecimal number (between 00 and FF) that represent the Unicode character equivalent. For example \u00A9 is the hexadecimal code for the copyright symbol. 
(Note: Unicode is only supported by JavaScript 1.3)

然后在这个string两边确保加上了引号, 表明这是一个string。


考虑如下的test case

如果在一个event里进行输出

OnClick="${output}">

首先,我们 应该严格禁止这种输出方式,因为这就等于让用户可以直接写js执行,那么除非过滤了所有的字符,否则很难做到安全输出。


正确的写法是程序员要定义好函数,用户输入只能做为函数的参数传入。

OnClick="javascript: test(${output});">

在这种情况下,输出的内容可能是一个string,也可能是一个int或者是对象。

如果输入只包含 大小写字母、数字,则可以保持原样不动的输出

如果包含了 “.”,“,”,“SPACE” 以外的字符,则可能会造成一些安全问题。

比如攻击者可以构造类似 );alert(1);(

来实施攻击。在这种情况下,包含了这些特殊字符则基本可以认定这不是一个int而是一个string.

所以在script中进行输出时,也需要严格按照标准进行转义。
阅读(1010) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~