Yar*_*veh 19 xml encoding html-encode escaping xml-encoding
我对以下短语中的"转义"和"编码"之间的区别感到困惑:
Xml编码
Xml转义
编码的Html
逃脱的网址
...
有谁可以向我解释一下?
在每个Web应用程序中,数据由各种层组成,如视图层,模型层,数据库层等.每个层都"应该"独立开发,以满足各种可伸缩性和可维护性要求.
现在,基本上,每一层都需要与其他人"交谈",他们必须决定一种他们可以谈论的语言.这称为编码.存在各种类型的编码,如ASCII,UTF-8,UTF-16等.现在,如果用户是中文或日文,那么对于他来说ASCII不起作用,因此他会继续使用UTF-16或任何其他编码技术可以保证中文通信.因此,从Web层,中文字符将通过业务层,然后到数据层,并且在任何地方,将使用相同的"编码"方案.
为什么?
现在假设,您的Web层以UTF-16发送数据,支持中文,但数据库层只接受ASCII,那么数据库层会对您在说什么感到困惑!它只能理解英文字符,不会理解其余部分.这是关于编码.
逃脱:
有一组称为"元数据"的数据,从浏览器的角度来看具有特殊含义.例如,<>来自浏览器角度的元数据.浏览器解析器知道<>要解释这些中包含的所有数据.现在攻击者使用这种技术来混淆浏览器.例如 :
<input type="text" value="${name} />
如果我用名称替换名称
name="/><script>alert(document.cookie)</script>
然后,浏览器看到的结果代码将是
<input type="text" value=""/><script>alert(document.cookie)</script> />
意思是,现在您需要指示浏览器,无论我放入什么内容都name=""应该"转义",或者应该只被视为数据.所以有各种函数可以编码/转义<>为它们的html等价物%3C%3E,所以现在浏览器知道这需要区别对待.基本上逃避意味着逃避他们的实际意义(粗略地说).
 <input type="text" value="${fn:escapeXML(name)} />
使用JSTL.