我碰巧了解了XSS以及如何避免它。从我读过的内容来看,我知道我们需要输入过滤,正确处理应用程序代码和输出编码,以使Web应用程序有点XSS安全。在阅读了几篇文章后,仍然存在一些疑问。关于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”)。文本(divValue)
所以,这将确保编码,但我的理解,我们说客户端的编码是不安全并且只应使用服务器端编码。如何在不使用客户端编码的情况下编写XSS以保证安全?我在这里有点糊涂:(。 请帮我清除这些疑虑。
'element.text'本身是安全的,但如果使用字符串插值将数据传递到客户端代码,则可能会遇到问题。 –