- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当用户在网站上注册时,我们应该在将值存储到数据库之前使用 EncodeForHTML()
还是 EncodeForURL()
?
我问这个的原因是,当我向某人发送一封电子邮件,其中包含一个包含电子邮件地址作为 URL 变量的 URL 时,我必须使用 EncodeForURL()
。但是,如果此电子邮件地址已经使用 EncodeForHTML()
进行了编码,则意味着我必须先对其进行 Canonicalize(),然后再对其使用 EncodeForURL()
。
因此我认为 EncodeForURL()
可能不错,但是在将值存储在数据库中时它是否“安全”和“正确”?
更新:阅读文档后,它说 EncodeForURL 仅用于在 URL 中使用值。因此,我应该将其存储为 EncodedForHTML,但随后在 URL 上下文中使用它时对 URL 进行规范化和重新编码似乎是有道理的。我不知道所有这些编码会对我的服务器造成多大的性能影响...??
最佳答案
从我公司的内部文档中复制这个。不确定图像是否正确上传,因为 imagr 被阻止@work。如果是这样,我稍后会重新上传它们。将来我会将此内容和更多相关内容发布到 Githib 存储库。
您应该将其存储为简单文本,但请确保在使用 AntiSamy 的过程中清理数据图书馆。一旦数据安全,请确保使用适当的编码器对数据进行编码。仅供引用,encodeForHTML()
和 encodeForHTMLAttribute()
的输出之间存在很大差异。
在下面的示例中,用数据库中的数据替换定义电子邮件地址的变量。
PROTIP:不要在 CFFORM 标签中使用这些编码器。这些标签会为您处理编码。 CF 9 及更低版本使用 HTMLEditFormat()
,CF 10 及更高版本最有可能使用 encodeForHTMLAttribute()
。
一个基本的实现是包含一个电子邮件地址,以便填充新电子邮件窗口的“收件人”字段。
<cfset email = "someone@example.com" />
<a href="mailto:#email#">E-mail</a>
<a href="mailto:someone@example.com">E-mail</a>
<cfset email = "someone@example.com" />
<a href="mailto:#encodeForURL(email)#">E-mail</a>
请注意,“@”符号被正确地编码为“%40”。
<a href="mailto:someone%40example.com">E-mail</a>
如果您计划在页面上显示电子邮件地址作为链接的一部分:
<cfset email = "someone@example.com" />
<a href="mailto:#encodeForURL(email)#">#encodeForHTML(email)#</a>
高级实现包括“收件人”和“抄送”的电子邮件地址。它还可以预填充新电子邮件的正文和主题。
<cfset email = "someone@example.com" />
<cfset email_cc = "someone_else@example.com" />
<cfset subject = "This is the subject" />
<cfset body = "This is the body" />
<a href="mailto:#email#?cc=#email_cc#&subject=#subject#&body=#body#">E-mail</a>
<a href="mailto:someone@example.com?cc=someone_else@example.com&subject=This is the subject&body=This is the body">E-mail</a>
请注意 subject 和 body 参数包含空格。虽然这个字符串在技术上是可行的,但它仍然容易受到攻击向量的攻击。</p>
假设 body 的值是由数据库查询的结果设置的。此记录已被恶意用户“感染”,默认正文消息附加了“BCC”地址,因此一些恶意用户可以获得通过此链接发送的电子邮件的副本。
<cfset body = "This is the body&bcc=someone@evil.com" />
<a href="mailto:someone@example.com?cc=someone_else@example.com&subject=This is the subject&body=This is the body&bcc=someone@evil.com">E-mail</a>
为了阻止这个 MAILTO 链接被感染,这个字符串需要被正确编码。
由于“href”是 标签的一个属性,您可能会考虑使用 HTML 属性编码器。 这是不正确的。
<cfset email = "someone@example.com" />
<cfset email_cc = "someone_else@example.com" />
<cfset subject = "This is the subject" />
<cfset body = "This is the body&bcc=someone@evil.com" />
<a href="mailto:#encodeForHTMLAttribute(email)#?cc=#encodeForHTMLAttribute(email_cc)#&subject=#encodeForHTMLAttribute(subject)#&body=#encodeForHTMLAttribute(body)#">E-mail</a>
<a href="mailto:someone@example.com?cc=someone_else@example.com&subject=This is the subject&body=This is the body&bcc=someone@evil.com">E-mail</a>
MAILTO
链接的正确编码是通过 URL 编码器完成的。
<cfset email = "someone@example.com" />
<cfset email_cc = "someone_else@example.com" />
<cfset subject = "This is the subject" />
<cfset body = "This is the body&bcc=someone@evil.com" />
<a href="mailto:#encodeForURL(email)#?cc=#encodeForURL(email_cc)#&subject=#encodeForURL(subject)#&body=#encodeForURL(body)#">E-mail</a>
注意关于 URL 编码器的这些事情:
<a href="mailto:someone%40example.com?cc=someone_else%40example.com&subject=This+is+the+subject&body=This+is+the+body%26bcc%3Dsomeone%40evil.com">E-mail</a>
加号有什么用?正确解码这些 URL 编码值取决于各个邮件客户端(例如 Outlook、GMail 等)。
在 ColdFusion 中使用 EncodeForHTML 时,换行符 (\n) 和回车符 (\r) 会转换为哪些字符?我已经尝试了所有我能想到的(或在网上找到的),但在我的 REReplace 语
当用户在网站上注册时,我们应该在将值存储到数据库之前使用 EncodeForHTML() 还是 EncodeForURL()? 我问这个的原因是,当我向某人发送一封电子邮件,其中包含一个包含电子邮件地
在一个web项目中,我们使用PHP中的OWASP ESAPI进行输出编码。在某些时候,我们希望允许 HTML 的子集用于小格式选项(例如 和 ),同时不允许所有其他标签和特殊字符(因此它们使用 &
为了防止跨站脚本 (XSS),我使用 OWASP 推荐的 ESAPI (Enterprise Security API) 。 The esapi.jar file has been included
对某些字符(在本例中为表情符号)使用 EncodeForHTML 时遇到问题 本例中的文本是:⌛️a😊b👍c😟💥🍉🍔💩🤦🏼♀️🤦🏼♀️🤦🏼♀️😘 现在如果我只是直接输
我的 JSP 中有一个 HTML 选择标记 ... ${device.name} .... 我将其设置为数据库中的设备名称 ">alert(
我需要清理 Http 参数值以防止 xss 攻击。我正在使用下面的 owasp jar 。esapi-2.1.0.1.jar 我有参数日期,其中包含以“/”分隔的值。date=20/10/2017 这
我知道,我们可以使用encodeForHTML来处理HTMl,使用encodeForJavascript来处理javaScript。我的代码中有一个跨站点脚本:“Reflected fortify s
我是一名优秀的程序员,十分优秀!