我刚好读到了有关XSS及如何避免的内容。根据我所读的,我知道我们需要进行输入过滤、正确处理应用程序代码和输出编码,才能使Web应用程序在一定程度上变得更安全。阅读了几篇文章后,仍然存在一些疑问。
当我尝试使用jQuery.text("untrusted_data")或element.text=untrusted_data时,浏览器似乎对内容进行了完美的编码,但我在其他地方读到说客户端编码不可信,必须“始终”在服务器端进行编码。为什么客户端编码被认为不安全?
每当我尝试使用jQuery.val(untrusted_data)或element.value=untrusted_data设置值时,它似乎足够安全。那么它真的是XSS安全的吗?还是我错过了某些情况?
- 此外,我在某个地方读到jQuery.setAttribute(attrName,untrusted_data)和setAttribute(attrName,untrusted_data)通常只被认为是安全的,如果属性名称不包括基于URL上下文的属性(src、href等)或事件处理程序(onClick、onMouseOver等)。如果是这样,我该如何使用setAttribute("href",untrusted_data)设置href属性?从服务器端使用encodeForHtmlAttribute(untrusted_data)是正确的方法吗?
- 我应该如何处理动态HTML创建。请考虑以下示例:
<div id="divName1" onClick="copyData()">untrusted_data</div>
<div id="divName2"></div>
function copyData()
{
var divValue = jQuery("#divName1").html();
jQuery("#divName2").html(divValue);/XSS Here
}
我想要实现的目标是从divName1获取文本并将其粘贴到divName2的内容中。我上面编写的代码存在XSS漏洞。我可以改成以下代码:
所以,这将确保编码,但据我所知,我们说客户端编码不安全,只应使用服务器端编码。如何编写此代码以使其在不使用客户端编码的情况下能够避免XSS攻击呢?我有点困惑 :(. 请帮助我澄清这些疑虑。jQuery("#divName2").text(divValue)
element.text
本身是安全的,但如果您使用字符串插值将数据传递给客户端代码,则可能会遇到问题。 - John Dvorak