Xml转义/编码术语

Yar*_*veh 19 xml encoding html-encode escaping xml-encoding

我对以下短语中的"转义"和"编码"之间的区别感到困惑:

Xml编码

Xml转义

编码的Html

逃脱的网址

...

有谁可以向我解释一下?

Wel*_*bog 27

编码描述了文件的字符是如何以二进制形式物理编写的(如Unicode或ANSI).

逃逸指替换特殊字符(诸如过程<>与他们的)XML实体当量(如&lt;&gt;).对于URL,转义是指用字符串开头替换字符%,例如%20单个空格.

转义因语言而异,但编码通常是广泛接受的标准.有时这些术语含糊不清(特别是编码用于表示转义),但它们定义明确且不同.

  • 迂腐的澄清:"unicode"不是编码而是字符集(UTF-8,ISO8859-1,CP850是编码的例子).遗憾的是,Unicode和UTF-8通常用作同义词,而不是. (3认同)

Roh*_*cha 6

在每个Web应用程序中,数据由各种层组成,如视图层,模型层,数据库层等.每个层都"应该"独立开发,以满足各种可伸缩性和可维护性要求.

现在,基本上,每一层都需要与其他人"交谈",他们必须决定一种他们可以谈论的语言.这称为编码.存在各种类型的编码,如ASCII,UTF-8,UTF-16等.现在,如果用户是中文或日文,那么对于他来说ASCII不起作用,因此他会继续使用UTF-16或任何其他编码技术可以保证中文通信.因此,从Web层,中文字符将通过业务层,然后到数据层,并且在任何地方,将使用相同的"编码"方案.

为什么?

现在假设,您的Web层以UTF-16发送数据,支持中文,但数据库层只接受ASCII,那么数据库层会对您在说什么感到困惑!它只能理解英文字符,不会理解其余部分.这是关于编码.

逃脱:

有一组称为"元数据"的数据,从浏览器的角度来看具有特殊含义.例如,<>来自浏览器角度的元数据.浏览器解析器知道<>要解释这些中包含的所有数据.现在攻击者使用这种技术来混淆浏览器.例如 :

<input type="text" value="${name} />
Run Code Online (Sandbox Code Playgroud)

如果我用名称替换名称

name="/><script>alert(document.cookie)</script>
Run Code Online (Sandbox Code Playgroud)

然后,浏览器看到的结果代码将是

<input type="text" value=""/><script>alert(document.cookie)</script> />
Run Code Online (Sandbox Code Playgroud)

意思是,现在您需要指示浏览器,无论我放入什么内容都name=""应该"转义",或者应该只被视为数据.所以有各种函数可以编码/转义<>为它们的html等价物%3C%3E,所以现在浏览器知道这需要区别对待.基本上逃避意味着逃避他们的实际意义(粗略地说).

 <input type="text" value="${fn:escapeXML(name)} />
Run Code Online (Sandbox Code Playgroud)

使用JSTL.