我碰巧读到了 XSS 以及如何避免它。根据我的阅读,我了解到我们需要输入过滤、正确处理应用程序代码和输出编码,以使 Web 应用程序在某种程度上是 XSS 安全的。浏览了几篇文章后,仍然存在几个疑问。
当我尝试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 漏洞。我可以将其更改为
jQuery("#divName2").text(divValue)
所以,这将确保编码,但据我了解,我们说客户端编码是不安全的,应该只使用服务器端编码。我应该如何在不使用客户端编码的情况下将其编写为 XSS 安全?我在这里有点困惑:(。请帮我解决这些疑问。