我有一个文本字段,人们可以输入他们想要的任何内容。但是,当我从文本字段中获取值时,我想返回编码的值,以便引号获得类似"
的值,而不是普通的"
。
我需要这个,因为在HTML属性(例如描述元标记)中使用它们时,普通值会导致我在网站中出现问题。
有没有办法从<input type="text"/>
表单元素中获取特殊字符的正确HTML代码?
答案 0 :(得分:3)
ColdFusion实际上包括OWASP ESAPI实用程序,这些实用程序专门用于回溯到ColdFusion 8(如果使用适当的安全性修补程序更新)。请参阅Pete Freitag撰写的这篇文章 - ColdFusion's Builtin Enterprise Security API
安装最新ColdFusion安全修补程序的一个不错的副作用是ColdFusion 8和ColdFusion 9现在都包含OWASP ESAPI或Enterprise Security API的jar文件。
这意味着现在可以非常轻松地从ColdFusion代码中利用这个功能强大的安全API。
以下是如何使用ESAPI编码器阻止跨站点脚本编写的简单示例:
<cfset esapi = CreateObject("java", "org.owasp.esapi.ESAPI")>
<cfset esapiEncoder = esapi.encoder()>
<cfoutput><p>Hello #esapiEncoder.encodeForHTML(url.name)#</p></cfoutput>
Encoder类具有对各种输入进行编码的方法,因此可以在各种上下文中安全地使用它们。这里列出了一些方便的编码器:
encodeForHTML - 用于在HTML标记之间编码字符串 encodeForHTMLAttribute - 用于编码HTML属性中的字符串 encodeForURL - 用于在url内部进行编码,例如:在href中 encodeForJavaScript - 用于javascript变量或函数参数内的输入 encodeForCSS - 用于编码CSS内部的变量(例如内联样式属性) encodeForXML - 在XML中编码变量 encodeForXPath - 在XPath查询中编码变量。
ESAPI还能做什么?
ESAPI还为验证,加密,记录,随机化等提供帮助。查看文档以了解它可以做什么。
以ColdFusion 10开头的新安全功能encodeFor*
实际上是这些实用程序的实现。 ColdFusion 10 Provides Powerful New Security Tools
这些实用程序为您做的远远超过htmlEditFormat()
。如上所述,它们包括针对各种上下文的特定编码/解码功能; HTML,HTML属性,URL,JavaScript,CSS,XML和XPath。它们还包括相同的验证。我鼓励你检查一下。我之前发布了一个关于如何使用这些实用程序实现验证的问题,这可能会对您有所帮助 - How to implement the OWASP ESAPI validator with groups of validation attempts in ColdFusion?
答案 1 :(得分:1)
虽然您没有指定任何编程语言,但您可以在PHP中使用htmlspecialchars()
函数。你只需要使用:
echo htmlspecialchars($_POST['inputname']);
有关详细信息,请参阅this page。
答案 2 :(得分:1)
你可以用jQuery做到这一点。请参阅codeproject
上的这篇文章答案 3 :(得分:1)
这只删除了几个重要的角色,你不必添加一个大的库来实现这个
var HTML_ENTITIES = {
'&': '&',
'>': '>',
'<': '<',
'"': '"',
"'": '''
};
// HTML escaping
htmlEscape = function(text) {
return text && text.replace(/[&"'><]/g, function(character) {
return HTML_ENTITIES[character];
});
};
希望这有帮助