`
未雨绸缪
  • 浏览: 215713 次
  • 性别: Icon_minigender_1
  • 来自: 陕西
社区版块
存档分类
最新评论

Web开发中特殊字符编码的那些事

 
阅读更多
Web开发中特殊字符编码的那些事

在Web开发中,常常会遇到因为特殊字符编码的问题,引发的安全问题,或是数据正确性的问题。特总结一下:

HTML编码

HTML 中 &、"、<、>等字符有特殊含义,它们是 HTML 语言的保留字,因此不能直接使用。使用这些个字符时,应使用它们的转义序列:
&:&amp; 
" :" 
' : &#039;
< :< 
> :> 

由于 HTML 网页本身就是一个文本型结构化文档,如果直接将这些包含了 HTML 特殊字符的内容输出到网页中,极有可能破坏整个 HTML 文档的结构。所以,一般情况下需要对动态数据进行转义处理,使用转义序列表示 HTML 特殊字符。下面的 JSP 网页将一些变量动态输出到 HTML 网页中:

<%@ page language="java" contentType="text/html; charset=utf-8"%> 
<%! 
String userName = "</td><tr></table>"; 
String address = " " type="button"; 
%> 
<table border="1"> 
<tr> 
<td>姓名:</td><td><%=userName%></td> ① 
</tr> 
<tr> 
<td>年龄:</td><td>28</td> 
</tr> 
</table> 
<input value="<%=address%>" type="text" /> ② 

在 ① 和 ② 处,我们未经任何转义处理就直接将变量输出到 HTML 网页中,由于这些变量可能包含一些特殊的 HTML 的字符,它们将可能破坏整个 HTML 文档的结构。我们可以从以上 JSP 页面的一个具体输出中了解这一问题:

<table border="1"> 
<tr> 
<td>姓名:</td><td></td><tr></table></td> 
① 破坏了 <table> 的结构 
</tr> 
<tr> 
<td>年龄:</td><td>28</td> 
</tr> 
</table> 
<input value=" " type="button" type="text" /> 
② 将本来是输入框组件偷梁换柱为按钮组件

融合动态数据后的 HTML 网页已经面目全非,首先 ① 处的 <table> 结构被包含 HTML 特殊字符的 userName 变量截断了,造成其后的 <table> 代码变成无效的内容;其次,② 处 <input> 被动态数据改换为按钮类型的组件(type="button")。为了避免这一问题,我们需要事先对可能破坏 HTML 文档结构的动态数据进行转义处理。


由于 HTML 网页本身就是一个文本型结构化文档,如果直接将这些包含了 HTML 特殊字符的内容输出到网页中,极有可能破坏整个 HTML 文档的结构。所以,一般情况下需要对动态数据进行转义处理,使用转义序列表示 HTML 特殊字符。

JavaScript涉及的特殊编码

单、双引号、控制字符(制表符(tab), 反斜线(backslash), 换行(cr), 换页符(ff), etc.)

SQL特殊字符的注入
保证不要将SQL中的参数通过拼字符串的方式,就可以避免SQL注入的相关问题

常用方法:
Java端编码方法:
org.apache.commons.lang3.StringEscapeUtils
escapeEcmaScript
escapeHtml4

JavaScript端解码方法:
var decodeEntities = (function() {
	// this prevents any overhead from creating the object each time
	var element = document.createElement('div');

	function decodeHTMLEntities (str) {
		if(str && typeof str === 'string') {
			// strip script/html tags
			str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
			str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
			element.innerHTML = str;
			str = element.textContent;
			element.textContent = '';
		}

		return str;
	}

	return decodeHTMLEntities;
})();
var s = decodeEntities("<script>&amp;&apos;");


Underscore.js的unescape方法

最简单的JS方法
function htmlDecode(str) {
	var s = "";
	if (str.length == 0) return "";
	s = str.replace(/&amp;/g, "&");
	s = s.replace(/</g, "<");
	s = s.replace(/>/g, ">");
	s = s.replace(/&#39;/g, "\'");
	s = s.replace(/"/g, "\"");
	return s;
}


URL编码

当一个字符串需要作为跳转的URL地址或是URL中包含的参数时,如果包含以下特殊字符,就需要做URL编码:
Dollar ("$")
Ampersand ("&")
Plus ("+")
Comma (",")
Forward slash/Virgule ("/")
Colon (":")
Semi-colon (";")
Equals ("=")
Question mark ("?")
'At' symbol ("@")
Space
Quotation marks
'Less Than' symbol ("<")
'Greater Than' symbol (">")
'Pound' character ("#")
Percent character ("%")
Left Curly Brace ("{")
Right Curly Brace ("}")
Vertical Bar/Pipe ("|")
Backslash ("\")
Caret ("^")
Tilde ("~")
Left Square Bracket ("[")
Right Square Bracket ("]")
Grave Accent ("`")

具体情况如下:
字符串是作为URL跳转的用encodeURI
字符串是作为URL的一个参数时,使用encodeURIComponent

到了Java后台时,就需要对解析的参数调用:
URLDecoder.decode(param,"utf-8");
0
1
分享到:
评论

相关推荐

    java字符编码监听器

    Java字符编码监听器是Java Web开发中的一个重要概念,主要用于处理HTTP请求和响应中的字符编码问题。在Java Servlet规范中,提供了`SetCharacterEncodingFilter`这样的过滤器,用于确保请求参数和响应内容的正确编码...

    判断字符编码格式代码

    - **Web开发**:服务器接收到客户端发送的HTTP请求时,需要判断请求体中的字符编码格式。 - **文件处理**:读取外部文件时,需要判断文件的编码格式以正确解析内容。 - **多语言支持**:在开发国际化应用时,根据...

    Web开发字符集相关知识

    Web开发中的字符集和字符编码是确保正确显示和处理文本数据的关键因素,特别是在涉及多语言和特殊字符时。本文将深入探讨字符集、字符编码、Web浏览器端的处理方式、Web服务器端的处理方式以及数据库的字符编码设置...

    xss特殊字符拦截与过滤

    在Web开发中,这样的防护措施非常重要,因为它能够过滤掉用户输入中的危险代码,降低XSS攻击的风险。通常这类防护措施会在Web框架层面或者中间件层面提供,用户只需要简单配置即可实现防护,但开发者也可以根据需要...

    验证自定义特殊字符.rar

    3. **安全考量**:在Web开发中,特殊字符可能被用于SQL注入、跨站脚本攻击(XSS)等。因此,对于用户输入,需要进行适当的转义或过滤,防止恶意代码的执行。 4. **函数和库的使用**:许多编程语言提供了内置的函数或...

    【JavaScript源代码】基于网址URL中特殊字符转义编码.docx

    【JavaScript源代码】基于网址URL中特殊字符转义编码是一个重要的概念,特别是在Web开发中,因为URL是连接互联网资源的基本途径。URL编码是确保数据在URL中正确传递的关键步骤,尤其是当URL包含特殊字符或者非ASCII...

    字符集编码

    在Web开发中,字符集编码问题经常成为开发者需要解决的关键技术挑战之一。不同语言、不同系统间的字符编码差异可能导致数据在传输过程中出现乱码等问题。因此,理解字符集编码的基本原理及如何在实际开发中正确配置...

    tomcat字符编码总结

    在Web开发中,字符编码问题一直是让人头疼的问题之一,尤其是在处理中文等多字节字符时。本文将深入探讨Tomcat环境中字符编码的相关知识点,并通过实际案例分析如何有效解决中文乱码问题。 #### 二、Tomcat与字符...

    字符编码之间的转换规则与实现

    总结来说,字符编码的转换是软件开发中的重要环节,特别是在全球化和多语言环境下。理解各种编码的特性、转换规则以及如何在不同编码间切换,能够帮助我们更好地处理和展示文本数据,避免乱码问题。在实际操作中,要...

    URL中编码URL特殊字符.docx

    URL编码是一种在网络应用中将非...了解这些差异对于正确处理和解析URL中的特殊字符至关重要,特别是在开发跨平台和跨浏览器的Web应用程序时。开发者应该根据具体的应用场景选择合适的编码方法,以确保数据的准确传递。

    java字符编码错误整理大全

    在Java开发过程中,字符编码问题是非常常见且容易引发一系列乱码问题的重要因素。本篇将详细梳理Java中的字符编码相关知识点,帮助开发者解决实际工作中遇到的各种乱码问题。 #### 二、基础知识 1. **编码与解码**...

    url特殊字符处理方法

    URL特殊字符处理方法 在URL中处理特殊字符是一个非常重要的知识点,特别是...URL特殊字符的处理方法是Web开发中一个非常重要的知识点,需要根据不同的情况选择合适的编码方法,以确保URL中的特殊字符可以正确地传递。

    HTML特殊字符速查表.pdf

    HTML特殊字符速查表是每个Web开发人员都必备的参考资料,它列出了在HTML文档中表示特殊符号的命名实体以及它们对应的十进制编码。这些特殊字符在HTML中用于显示那些无法通过键盘直接输入的字符,或者是一些在特定...

    彻底根治Spring @ResponseBody JavaScript HTML特殊字符

    在开发Web应用时,我们经常会遇到一个问题:当使用Spring MVC的`@ResponseBody`注解将后端处理结果直接转化为HTTP响应体时,如果这个结果中包含HTML特殊字符,如尖角号、引号、按位与符号等,浏览器可能会误解析,...

    字符编码表新版.zip

    字符编码是计算机处理文本的基础,它定义了数字与特定字符之间的映射关系。..."字符编码表新版.pdf"文件将提供最新的编码标准和多语言对照,对于从事多语言开发的IT专业人士来说,是一份极具价值的参考资料。

    php ASCII 字符转换 (汉字及特殊字符) 宽字符 (uft8/unicode)

    总的来说,理解和掌握ASCII、UTF-8以及Unicode之间的关系,以及PHP中处理字符编码的函数,对于开发涉及多语言的Web应用至关重要。在处理汉字和特殊字符时,要特别注意编码的正确设定和转换,以确保数据的准确性和...

    Web开发编码助手++++

    在Web开发过程中,编码与解码是至关重要的环节,它们涉及到数据传输、页面展示和用户交互等多方面。本文将详细解析"Web开发编码助手"的相关知识点,包括HTML编码、URL编码、Unicode编码以及Encode与Decode的概念。 ...

    中文转换成NCR编码

    在IT领域,尤其是在处理网页和富文本内容时,字符编码是一个至关重要的概念。...在编程实践中,我们应当养成良好的编码习惯,注意字符编码的选择和转换,以便在各种环境和场景下都能得到理想的显示效果。

    ant打包时编码 GBK 的不可映射字符.txt

    但是,在处理包含非ASCII字符(例如中文)的源代码时,可能会遇到字符编码问题,导致编译失败或产生乱码。本文将详细介绍当使用Ant进行项目打包时,遇到GB2312(GBK)编码下不可映射字符问题的原因及解决方案。 ###...

    阿里web前端开发手册.pdf

    CSS 规范是阿里web前端开发手册中的一部分。手册规定了CSS 命名规范,例如,应该使用小写字母和数字,且不能使用特殊字符和汉字。同时,手册还规定了选择器的使用规范,例如,应该使用类选择器而不是ID 选择器。 4....

Global site tag (gtag.js) - Google Analytics