GVKun编程网logo

web.xml 设置字符编码(web.xml配置代码)

19

在本文中,您将会了解到关于web.xml设置字符编码的新资讯,同时我们还将为您解释web.xml配置代码的相关在本文中,我们将带你探索web.xml设置字符编码的奥秘,分析web.xml配置代码的特点

在本文中,您将会了解到关于web.xml 设置字符编码的新资讯,同时我们还将为您解释web.xml配置代码的相关在本文中,我们将带你探索web.xml 设置字符编码的奥秘,分析web.xml配置代码的特点,并给出一些关于chardet:字符编码探测器,自动检测文本、网页、xml的编码、eclipse 设置字体、字符编码、快捷键、Firefox 浏览器设置字符编码格式、GBK字符编码(字符集)缺陷导致web安全漏洞的实用技巧。

本文目录一览:

web.xml 设置字符编码(web.xml配置代码)

web.xml 设置字符编码(web.xml配置代码)

 

个人理解  就是为了防止在前端输入的数据到了后台发生乱码

直接复制到web.xml里面就可以使用 亲测 能用!!!

 

<!-- 前端过滤器设置字符编码 -->
<filter>
<filter-name>encoding-filter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 

 

推荐网址:https://blog.csdn.net/uhgagnu/article/details/59103027

chardet:字符编码探测器,自动检测文本、网页、xml的编码

chardet:字符编码探测器,自动检测文本、网页、xml的编码

楔子

<font size=4>在请求数据的时候,我们得到的可能是一堆字节,这个时候我们会通过decode将其解码。但是解码的前提是我们需要知道其对应编码是什么,比如:utf-8iso-8859-1gbk等等。而python也提供了相应的模块,用于检测字节对应的编码。</font>

chardet检测编码

from chardet import detect

# 直接传入字节即可
print(detect(b"are you ok?"))  # {''encoding'': ''ascii'', ''confidence'': 1.0, ''language'': ''''}
"""
可以看到返回一个字典,包含三个key:
encoding: 使用的编码
confidence: 检测的准确度
language: 所使用的语言
"""

<font size=4>对于其它语言也是支持的</font>

from chardet import detect

chinese_utf8 = "你为什么这么熟练啊".encode("utf-8")
chinese_gbk = "你为什么这么熟练啊".encode("gbk")
print(detect(chinese_utf8))  
# {''encoding'': ''utf-8'', ''confidence'': 0.99, ''language'': ''''}

print(detect(chinese_gbk))  
# {''encoding'': ''GB2312'', ''confidence'': 0.8888888888888888, ''language'': ''Chinese''}

<font size=4>我们看到当使用utf-8编码的时候,虽然能检测出编码,但是无法推测出语言,因为任何语言的字符都可以正常使用utf-8进行编码。但是下面的gbk是可以推断出语言的,因为这是专门用于中文的编码,显示的gb2312是gbk的子集。</font>

from chardet import detect

jp_utf8 = "なんでそんなに慣れてんだよ".encode("utf-8")
jp_euc = "なんでそんなに慣れてんだよ".encode("euc-jp")
print(detect(jp_utf8))
# {''encoding'': ''utf-8'', ''confidence'': 0.99, ''language'': ''''}

print(detect(jp_euc))
# {''encoding'': ''EUC-JP'', ''confidence'': 1.0, ''language'': ''Japanese''}

<font size=4>对于日文也是一样的,chardet支持多种语言。</font>

<font size=4>尤其是向其它地方请求数据的时候,给你返回了一堆你不知道是什么编码的字节,这个时候就可以使用chardet,最典型的就是requests。</font>

<font size=4>我们在使用requests的get方法之后,会调用text得到请求的html。但是有时候调用text返回的内容里面包含乱码,这是因为requests在内部是先获取的字节,然后再进行解码、返回,而在解码的时候,使用了错误的编码造成的</font>

<font size=4>而一般我们在调用text之前,我们会手动指定使用的编码</font>

import requests

res = requests.get("http://www.baidu.com")
# res.content: 会拿到html对应的字节流
# res.encoding: 所使用的编码,根据网站决定
# res.text: 会先获取res.content,然后通过res.encoding进行解码得到res.txt

# 但是默认的res.encoding不一定能够正常解码,这个时候我们会手动指定res.encoding
# 将res.apparent_encoding赋值给res.encoding
res.encoding = res.apparent_encoding
# 然后调用res.text就能正常打印内容了
print(res.text)

<font size=4>那么我们就可以进入源码中看看这个res.apparent_encoding是什么</font>

    @property
    def apparent_encoding(self):
        """The apparent encoding, provided by the chardet library."""
        return chardet.detect(self.content)[''encoding'']

<font size=4>看到了吗?requests也是通过chardet检测对应的编码的,因为requests默认使用网站返回的编码,但是不一定靠谱。而通过这一步,会根据返回的字节手动推断出其使用的编码,然后赋值给res.encoding,这样再解码就没有问题了。</font>

<font size=4>因此想知道返回的字节是什么编码的话,使用chardet是个很不错的选择。</font>

eclipse 设置字体、字符编码、快捷键

eclipse 设置字体、字符编码、快捷键

1. 设置字体:

  preferences->general->appearnce->colors and fonts->edit-> 字体大小 14, 字形常规,字体 Consolas

2. 设置字符编码:

  general->workspace->other: 选择 utf-8,apply

3. 设置快捷键

  图片如下所示:

  

  一些常用的快捷键:

    alt+/ 代码助手完成一些代码的插入
    Ctrl+1 快速修复
    Shift+Enter 在当前行的下一行插入空行 (这时鼠标可以在当前行的任一位置,不一定是最后)
    Ctrl+Shift+Enter 在当前行插入空行 (原理同上条)

    Ctrl+D: 删除当前行
    Ctrl+Alt+↓ 复制当前行到下一行 (复制增加) // 冲突孜为:ctrl+↓
    Ctrl+Alt+↑ 复制当前行到上一行 (复制增加) // 冲突孜为:ctrl+↑
    Alt+↓ 当前行和下面一行交互位置 (特别实用,可以省去先剪切,再粘贴了)
    Alt+↑ 当前行和上面一行交互位置 (同上)

    Ctrl+Shift+F 格式化当前代码
    Ctrl+F 查找与替换
    Ctrl+Shift+X 把当前选中的文本全部变味小写
    Ctrl+Shift+Y 把当前选中的文本全部变为小写
    Ctrl+/ 注释当前行或选中的行,再按则取消注释
    Ctrl+Shift+/ 注释选中的行
    Ctrl+Shift+\ 解注释

Firefox 浏览器设置字符编码格式

Firefox 浏览器设置字符编码格式


    今天写博客,敲示例代码时遇到的问题。简单的 HTML 页面,在火狐浏览器出现中文乱码。如果是 IE 浏览器的话,直接通过菜单查看 –> 编码 就可以指定编码方式,解决乱码问题。现在 Firefox 浏览器版本升级太快,且展示方式也经常变化,本人还找了一番才找到火狐浏览器的设置字符编码的方式,在此分享出来,希望能帮到碰到这个问题的朋友。


    本人使用的 Firefox 浏览器版本为 36.0.1


    为了屏幕展示内容多一些,将菜单栏隐藏掉了,页面的展示效果为


    HTML 页面为

[html] view plain copy
  1. <</span>body>  
  2.     <</span>p>  
  3.         <</span>label for="hobby">Hobby:    
  4.             <</span>input type="checkbox" name="hobby" value="reading" /> 阅读    
  5.             <</span>input type="checkbox" name="hobby" value="climbing" /> 爬山    
  6.             <</span>input type="checkbox" name="hobby" value="running" /> 跑步    
  7.             <</span>input type="checkbox" name="hobby" value="fishing" /> 钓鱼    
  8.             <</span>input type="checkbox" name="hobby" value="cooking" /> 做饭    
  9.             </</span>br></</span>br>  
  10.             <</span>input type="button" value="Get Value" onclick="getValue()" />  
  11.         </</span>label>  
  12.     </</span>p>  
  13. </</span>body>  

    结果如此页面在 Firefox 浏览器上出现了乱码,格式为

 

    由于平时隐藏掉了菜单栏,所以找设置编码的地方时,花了好大的力气。

 

    现在分享两种可以改变页面的编码格式的方式。


method1 展示菜单栏


   在浏览器菜单栏的空白区域右键点击,点击菜单栏


    完成后,浏览器的菜单栏展示出来


    接下来,就可以按照 IE 浏览器前面说过的方式,查看 -> 字符编码 ->Unicode 改变乱码了。



Method2 定制菜单栏

   

    浏览器右上角有打开菜单的按钮,点击进去


    出现



   若红色框中没有字符编码操作的话,点击定制


    将左侧的字符编码工具拖至右边的菜单栏,接下来就可以进行编码的修改了。

本文同步分享在 博客 “lxw1844912514”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。

GBK字符编码(字符集)缺陷导致web安全漏洞

GBK字符编码(字符集)缺陷导致web安全漏洞

多字节编码由来
我们先来看看最常用的,最小字符集是ascii,对应的二级制可以表示为:00-7F 编码 。它也是我们计算机使用最早通用的字符集。前期几乎可以表示所有英文字符。后来,更多使用计算机国家加入后,我们就想在计算机中表示中文字符。我们知道常见中文就有7000多个字符。ascii码就只有128字符,只有0-127编码位置,远远不够用了。因此,我们就开始制作更大字符集,并且保证兼容ascii编码。要支持更多字符,选择更大字符集。我们只能用多个字节来描述一个字符了。为了很好的与ascii码,区分开来!一般做法是:每个字节值都大于>7F,如果是2个字节,那么就是:[>7F][>7F]。这样编码,保证很好的与ascii区分开,并且扩大了字符集。像gb2312范围在[0xA1-0xF7][0xA1-0xFE](中间很多没有填满),它完全保证所有字节在A0之上,也就完全满足在7F之上了。
GBK编码漏洞缘由
通过上面的分析,我们知道gb2312编码是很好的跟ascii码分开了。 那么我们看看,GBK编码呢,它是完全兼容gb2312(就是说在gb2312字符集中每个字符位置,与gbk字符集里面位置完全一致,而且包含于gb2312),但是,它有2万多个字符。从上面看,只能选择往下排序了。 就是从A1A0往下排了,我们发现它编码实际范围是:[0x81-0xFE]([0x40-0x7E|0x80-0xFE] ) (GBK编码),我们发现由2个字节组成,首字节范围在7F之上,而第2个字节,有一部分在0x40-0x7E了。这就是导致bug原因。我们看看下面例子吧!

从ASCII码表中,我们知道0x40-0x7E 包含字符有:“

选择gbk编码,运行上面代码,就一条简单的命令导致出现错误,说字符串 赋值 没有结束! 呵呵,估计很多人看到这个就会认为是php 出Bug了。但是,如果我们变成$a=”誠a”,发现可以正常运行了。是不是觉得很奇葩啦!!

原因分析:我们知道文件存在磁盘都是二级制方式,无论你存什么字符,最终都是以该字符的在所选字符集中字符编码保存。php解析时候,最小分析单元是字节。无论你是多字节还是单字节字符。最终都是按照字节来处理的。“誠” GBK编码是 D55C,php按字节来解释,5C对应字符是“\” 字符。后面直接跟个‘”'',相当于被转义了。 因为没有闭合,因此出现错误!。大家看出问题所在了吧,按自己处理的话,会自然把多字节拆成单字节了。这样就会出现很多奇怪问题了。
总结:通过上面讲解,我们知道了多字节编码过程,以及GBK导致简单程序出错的原因。其实,我们很多程序语言里面,都会以单个字节来解析的。这样,当你选择多字节GBK编码中文时,刚好有字节落在特殊位置,将会出现奇怪错误问题。而且,还将给系统带来本身的漏洞,后面我再说说,GBK编码缺陷,导致漏洞、以及专门利用该编码漏洞缺陷进行系统入侵!好了,先到这里了,欢迎交流!

GBK字符编码(字符集)缺陷攻击(注入)原理

上一节,我们分析了。选择不同编码可能会导致程序带来本身潜在的漏洞。这次我们以GBK编码为例,看看怎么样通过该编码注入到系统中。目前很多开源系统都存在类似的注入问题。我们先来,从一个Demo开始!

GBK字符集漏洞注入原理

<?php
$u=isset($_GET[''u''])? $_GET[''u'']:'''';
$u=addslashes($u);
$sql = "select * from user where user=''$u''";

以上是我们写的一个测试例子(GBK编码),现在很多开源系统,比较少的进行统一参数过滤,有时候为了防止注入,就直接对参数进行转义处理。我们看看,这样一个例子,我们怎么样注入进系统!

步骤 备注 1.传入值%D5%27 or 1=1# u参数参入上面值 (%27 对应是“''” 单引号字符) 2.GET获取的值 0xD50x27 or 1=1# 3.Addslashes后值 0xD50x5C0x27 or 1=1 (意思是:誠'' or 1=1#'') #字符后面被注释掉 4.sql值 将变成 select * from user where user=''誠'' or 1=1#'' #号是sql注释符号,后面字符将截取掉

GPC转义打开,或者是通过addslashes函数,会自动在字符是单引号(‘)、双引号(")、反斜线(\)与 NUL(NULL 字符)等字符前面增加“\”字符(0x5c),例子里面,我们采用一个特殊前面字节0xD5,它将与该字节组合变成:0xD50x5c ,刚好是gbk字符集中字符:”誠“ 了。 后面的0×27这个单引号被保留下来了!

GBK字符集漏洞注入总结

呵呵,这个很有意思吧,好了。我们来总结下,这类注入是2个条件的。第一是:gbk编码,第二是:程序采用了转义方法,转义了输入。 这2个条件不苛刻,目前大部分开源系统都有gbk,utf-8编码的源码,剩下的就去看看,源码里面有没有用类似转义方法,过滤字符串了。如果有,那么这个系统某个功能,你可以去渗透下了。这个编码漏洞,网上面提的很多,不过很多时候,没有引起开发人员的足够重视,还是在不断的重现!

那么我们如果要注入一个参数,我们该选择什么样的入参参数呢?其实这种转义字符是单引号(‘)、双引号(")、反斜线(\)与 NUL(NULL 字符),我们这些字符往往在程序中有特殊作用,我们只需要在前面加一个在>7F字符,后面接一个%27(‘)、%22(")、%5C(\)、%00(NULL 字符),就可以自己让这4个字符,可以逃脱转义了。

好了,这个漏洞原理及注入过程分析就这些了。我们开发时候,需要注意这个问题,特别是使用GBK编码开发程序,要有这个方面的预备知识,对于自己开发安全的代码会有帮助的。更多的GBK编码,可以看http://doc.chacuo.net/gbk !(这里有很多落在5c中文字符呢)也欢迎讨论!

关于web.xml 设置字符编码web.xml配置代码的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于chardet:字符编码探测器,自动检测文本、网页、xml的编码、eclipse 设置字体、字符编码、快捷键、Firefox 浏览器设置字符编码格式、GBK字符编码(字符集)缺陷导致web安全漏洞等相关知识的信息别忘了在本站进行查找喔。

本文标签: