zoukankan      html  css  js  c++  java
  • 编码-1

    检测攻击,用的 都是ASCII可表示的可见字符,

    所以unicode对这些字符编码都是一样的,不同的是各个语言,

    所以我们解码就简单了:

    只是针对%uxxxx  (%u00xx  和 %uFFxx)

    全角数字(0-9) uFF10 - uFF19
    全角大文字(A-Z): uFF21 - uFF3A
    全角小文字(a-z): uFF41 - uFF5A

    直接转十六进制 就ok



    http://www.360doc.com/content/11/1223/16/2150778_174499703.shtml
    http://wenku.baidu.com/view/2bdb81f8941ea76e58fa0427.html?re=view

    请求报文(消息),由三个部分组成,从前到后分别是:

    (1)start line

    (2)headers

    (3)body

    好了,首先要明确的是(1)和(2)必须是ASCII码字符,也就是说出现在(1)和(2)里的字符编码必须为0-127之内。(3)中的内容可以是任何编码,可以是字符编码,也可以是图像的编码,也可以是任意二进制编码。至于到底里面是什么,通过(2)中的  Content-Type:头来说明。

    http://blog.csdn.net/smstong/article/details/6038596

    一、对于startline

    method request-URL version CRLF,其中method为方法名,如GET,POST等,后跟空格,后跟请求的URL,后跟空格,后跟版本号,后跟CRLF。

    这里需要注意的是URL的编码,前面已经讲过了,首先startline里的内容必须为ASCII码,而对于startline里面的URL则更为苛刻,URL的格式为http://hostname:port/p1/p2/resource,其中://为固定编码,/用来分隔路径,:用来指定端口号,resource指定资源名,p1,p2是路径名。URL的苛刻要求在于,hostname,p1,p2,resource的名称必须限定于ASCII码的一个子集,见下表:

    Unreserved

    [A-Za-z0-9] | "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"

    Reserved

    ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","

    Escape

    "%" <HEX> <HEX>

    其中Reserved一行中的ASCII码不允许出现在hostname,p1,p2,resource中,可要是确实需要这些字符怎么办呢,此时 就需要通过称为URLEncode的方法对不允许出现的字符进行编码为允许的字符,例如本来resource的名字为~voice,那么编码后就变成 了%7Evoice,其中7E为~字符的ASCII码的十六进制的ASCII表示。原则上这种方式只能编码Reserved的ASCII码,而现在人们扩 展了这种方法,也利用这种方法编码复杂字符,如GB2312和UTF-8等,如把GB2312的“好人”编码为%BA%C3%C8%CB,把UTF-8 的"好人"编码为%E5%A5%BD%E4%BA%BA,虽然这不规范但已经成了实事上的标准了。

    三、对于body

    body里是什么内 容,如果是字符采用什么编码,如果是图像又采用什么格式,所有这些都是有headers里规定的。其中Content-Type规定了body里面是什 么,采用什么编码,如Content-Type: text/html; charset=UTF-8,表示body里的内容是html文件,采用UTF-8编码。这里需要注意的是对于:Content-Type: application/x-www-form-urlencoded,这是POST常用的消息类型,它表明body里放的是表单数据,采用的编码为 urlencoded。首先,这种格式的body内容必须为ASCII码,除了格式化字符自身外,其他字符必须限定于ASCII的unreserved子 集。举例来说,这种body的格式为name1=value1&name2=value2&name3=&name4=value4,name1,name2,name3,name4 为变量名,value1,value2,value3,value4为变量的值,=和&为格式化字符。这里要求 name1,name2,name3,name4,value1,value2,value4的编码必须为ASCII的UnReserved子集。

    对编程的提示:

    仅仅对需要URLEncode的地方进行编码,不要全部进行编码。如GET http://www.baidu.com/s?wd=~testCRLF

    (1)首先确定URL的部分,不是URL的部分根本不能进行URLencode编码。显然URL部分是http://www.baidu.com/s?wd=~test。对于GET,空格,CRLF三部分不属于URL,不能进行特殊编码。

    (2)确定URL部分需要URLEncoded的地方。需要进行RULEncode的只是www.baidu.com,s,wd,~test。尽管www.baidu.com,s,wd编码前后不变但它们也是需要编码的部分。而对于http://,:,/,?,=,它们本身是格式化字符,具有特殊意义不能再进行URLencode编码了。

    所以startline可以这样生成:

    string startline = "GET " + "http://" + URLEncode(www.baidu.com) + "/" + URLEncode("s") + "?" + URLEncode("wd") + "=" + URLEncode("~test") + "/r/n";

  • 相关阅读:
    linux 下java jar包的方法
    (转)浅谈Java的输入输出流
    把java文件打包成jar文件
    C#ListView控件中列添加控件ComboBox,控件TextBox,添加时间选择列DateTimePicker
    <LabelId>k__BackingField反编译错误修改
    oracleI基础入门(6)sql语句And or Crazy
    oracleI基础入门(6)sql语句distinct Crazy
    oracleI基础入门(6)sql语句Order By Crazy
    oracleI基础入门(6)sql语句Like Crazy
    oracleI基础入门(6)sql语句count Crazy
  • 原文地址:https://www.cnblogs.com/shengxinking/p/3835425.html
Copyright © 2011-2022 走看看