⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 234.htm

📁 unix高级编程原吗
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="189.htm">上一层</a>][<a href="235.htm">下一篇</a>]
<hr><p align="left"><small>发信人: ysqcn (岁月无声), 信区: UNP <br>

标  题: http请求URI中的%有什么特殊意义? <br>

发信站: UNIX编程 (2001年09月01日15:22:32 星期六), 站内信件 <br>

  <br>

-- <br>

:※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/ <br>

:·[FROM: 211.69.197.81] 发信人: scz (小四), 信区: UNP <br>

:标  题: Re: http请求URI中的%有什么特殊意义? <br>

:发信站: UNIX编程 (2001年09月01日19:24:07 星期六), 站内信件 <br>

  <br>

不清楚, <br>

反正我就当它是0x,后面就是16进制数 <br>

  <br>

【 在 ysqcn (岁月无声) 的大作中提到: 】 <br>

  <br>

  <br>

-- <br>

  <br>

            也许有一天,他再从海上蓬蓬的雨点中升起, <br>

            飞向西来,再形成一道江流,再冲倒两旁的石壁, <br>

            再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... <br>

:※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 211.167.65.123] 发信人: sc <br>

ircle (yuanyuan), 信区: UNP <br>



:标  题: Re: http请求URI中的%有什么特殊意义? <br>

:发信站: UNIX编程 (2001年09月02日10:06:12 星期天), 站内信件 <br>

  <br>

是一种转义提示符,就像'\'似的. <br>

嵌入汇编里不是也有%%eax,以和%0,%1之类区别的吗. <br>

  <br>

【 在 scz (小四) 的大作中提到: 】 <br>

: 不清楚, <br>

: 反正我就当它是0x,后面就是16进制数 <br>

: 【 在 ysqcn (岁月无声) 的大作中提到: 】 <br>

-- <br>

:※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 202.108.211.32] 发信人: So <br>

laris (lazy), 信区: UNP <br>

:标  题: Re: http请求URI中的%有什么特殊意义? <br>

:发信站: UNIX编程 (2001年09月02日16:27:48 星期天), 站内信件 <br>

  <br>

%号后面的是16进制数,表示汉字的内码 <br>

如“百”字的汉字内码是B6D9, <br>

用这种方式表示出来就是“%B6%D9” <br>

使用这种编码方式时 <br>

环境变量CONTENT_TYPE被置为application/x-www-form-urlencoded <br>

  <br>

  <br>

【 在 ysqcn (岁月无声) 的大作中提到: 】 <br>

-- <br>

:※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 202.117.62.190] 发信人: ys <br>

qcn (岁月无声), 信区: UNP <br>

:标  题: Re: http请求URI中的%有什么特殊意义? <br>

:发信站: UNIX编程 (2001年09月02日16:51:39 星期天), 站内信件 <br>

  <br>

嗯,明白了,它的语法是 : <br>

hex="A"|"B"|"C"|"D"|"E"|"F"|"a"|"b"|"c"|"d"|"e"|"f"|digit <br>

escape= "%" hex hex <br>

  <br>

在看khttpd在解析"%"这个转义序列的时候碰到这个问题的,如下: <br>

  <br>

Source = strchr(URL,'%'); <br>

  <br>

 if (Source==NULL) <br>

  return; <br>

  <br>

 Dest = Source; <br>

  <br>

 while (*Source!=0) <br>

 { <br>

 { <br>

  if (*Source=='%') <br>

  { <br>

   Source++; <br>

   val = *Source; <br>

  <br>

   if (val>'Z') val-=0x20;        /*  ASCII码 'a'->'A' or 'b'->'B' 等等  */ <br>

   val = val - '0';               /*  ASCII码 '9'->数字9  等等 */ <br>

   if (val<0) val=0; <br>

   if (val>9) val-=7;             /*  'A'-'0' -7 =10 等等 */ <br>

   if (val>15) val=15; <br>

  <br>

   Source++;                      /*  下一个 hex  */ <br>

   val2 = *Source; <br>

  <br>

   if (val2>'Z') val2-=0x20; <br>

   val2 = val2 - '0'; <br>

   if (val2<0) val2=0; <br>

   if (val2>9) val2-=7; <br>

   if (val2>15) val2=15; <br>

   *Dest=val*16+val2;             /* 计算实际的转义值 */ <br>

  } else *Dest = *Source; <br>

  Dest++; <br>

  Dest++; <br>

  Source++; <br>

 } <br>

 *Dest=0; <br>

  <br>

  <br>

【 在 Solaris (lazy) 的大作中提到: 】 <br>

: %号后面的是16进制数,表示汉字的内码 <br>

: 如“百”字的汉字内码是B6D9, <br>

: 用这种方式表示出来就是“%B6%D9” <br>

: 使用这种编码方式时 <br>

: 环境变量CONTENT_TYPE被置为application/x-www-form-urlencoded <br>

: 【 在 ysqcn (岁月无声) 的大作中提到: 】 <br>

-- <br>

:※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 211.69.197.81] 发信人: loo <br>

kout (看世界), 信区: UNP <br>

:标  题: Re: http请求URI中的%有什么特殊意义? <br>

:发信站: UNIX编程 (2001年09月02日17:12:29 星期天), 站内信件 <br>

  <br>

 啊,想到了那个iis的%1c%c1之类的漏洞 <br>

  <br>

【 在 Solaris (lazy) 的大作中提到: 】 <br>

: %号后面的是16进制数,表示汉字的内码 <br>



: 如“百”字的汉字内码是B6D9, <br>

: 用这种方式表示出来就是“%B6%D9” <br>

: 使用这种编码方式时 <br>

: 环境变量CONTENT_TYPE被置为application/x-www-form-urlencoded <br>

: 【 在 ysqcn (岁月无声) 的大作中提到: 】 <br>

-- <br>

:※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 202.114.1.121] 发信人: scz <br>

 (小四), 信区: UNP <br>

:标  题: Re: http请求URI中的%有什么特殊意义? <br>

:发信站: UNIX编程 (2001年09月02日23:24:28 星期天), 站内信件 <br>

  <br>

【 在 lookout (看世界) 的大作中提到: 】 <br>

:  啊,想到了那个iis的%1c%c1之类的漏洞 <br>

  <br>

那不一样 <br>

0x这种就是直接的ASCII编码,顶多考虑汉字区 <br>

%2e对于我来说就是0x2e,不就是个.嘛。 <br>

象以前有些内容过滤不对这个%解码的,我们就简单变换成 <br>

16进制表示以逃避针对URL的内容过滤。 <br>

  <br>

但UTF-8的要复杂点,看这篇 <br>

  <br>

  <br>

标题:UTF-8的小知识 <br>

  <br>

参看RFC 2279 <br>

  <br>

UCS-4 range (hex.)    UTF-8 octet sequence (binary) <br>

0000 0000-0000 007F   0xxxxxxx <br>

0000 0080-0000 07FF   110xxxxx 10xxxxxx <br>

0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx <br>

0001 0000-001F FFFF   11110xxx 10xxxxxx 10xxxxxx 10xxxxxx <br>

0020 0000-03FF FFFF   111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx <br>

0400 0000-7FFF FFFF   1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx <br>

  <br>

所以唯一真正要考虑的就是汉字,一个汉字两个字节,表示方法太多了。 <br>

  <br>

%c1%1c --> 11000001 00011100 --> <br>

           ~~~~~~~~~~~~~~~~~ <br>

     袁哥: 微软的程序员在这里出了问题,鬼知道为什么有些版本检测了高位有些 <br>

           版本没有检测高位,实际上这里应该是 <br>

  <br>

%c1%9c --> 11000001 10011100 --> 00001011100 --> 0x5c --> '\' <br>

           ~~~~~~~~~~~~~~~~~ <br>

  <br>

  <br>

微软的编程不知道哪根弦出了问题,有些版本对高位检测很严格,必须%c1%9c,有些 <br>

版本必须%c1%1c,另外一些版本则是两种表示都可以。但是根据RFC 2279,必须是前 <br>

者。 <br>

  <br>

至于'+'和' '的关系,更加混乱,各种WEB实现或多或少有区别。 <br>

  <br>

现在来看看'.'的UTF-8编码,很多种方式: <br>

  <br>

'.' --> 0x2e --> %2e <br>

             --> 101110 --> 11000000 10101110 --> %c0%ae <br>

                            ~~~~~~~~~~~~~~~~~ <br>

                            这种是标准UTF-8编码方式 <br>

                            11000000 00101110 --> %c0%2e <br>

                            ~~~~~~~~~~~~~~~~~ <br>

                            这种是不规范的微软编码方式 <br>

  <br>

  <br>

【 在 lookout (看世界) 的大作中提到: 】 <br>

:  啊,想到了那个iis的%1c%c1之类的漏洞 <br>

: 【 在 Solaris (lazy) 的大作中提到: 】 <br>

: : %号后面的是16进制数,表示汉字的内码 <br>

: : 如“百”字的汉字内码是B6D9, <br>



: : 用这种方式表示出来就是“%B6%D9” <br>

: : 使用这种编码方式时 <br>

: : 环境变量CONTENT_TYPE被置为application/x-www-form-urlencoded <br>

  <br>

  <br>

-- <br>

  <br>

            也许有一天,他再从海上蓬蓬的雨点中升起, <br>

            飞向西来,再形成一道江流,再冲倒两旁的石壁, <br>

            再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... <br>

※ 修改:·scz 於 ★★ 欢迎光临 ★ 修改本文·[FROM: 211.167.65.123] <br>

※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 211.167.65.123] <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="189.htm">上一层</a>][<a href="235.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -