因此,我对JavaScript相对陌生,尽管我一直都在做HTML / CSS UI前端工作(亵渎我,我知道),并且正在开发自己的样板供将来的项目使用。我对从XSS,CodeInjection等保护代码的想法还很陌生。
以下是我一直在努力的完整摘录。在生产中,将缩小JavaScript并从外部文件加载而不是内联加载,这只是出于易于使用的示例。
我想知道是否通过将变量输出创建为纯文本并将其通过document.getElementById(“ x”)。href插入,是否给诸如CSS攻击之类的漏洞留下了空间。关于这些类型的漏洞有大量的信息,但是作为安全代码环境的一个相对较新的漏洞,它令人生畏并且有点不知所措。
PS,<p></p>
也仅用于测试。
预先感谢所有人!
对于代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Title</title>
<!-- required CSS -->
<!-- conditional CSS -->
<link rel="stylesheet" type="text/css" href="assets/css/mq/null" id="mediaquery" />
</head>
<body>
<p id="test"></p>
<script type="text/javascript">
(function setCSS() {
if (window.matchMedia("screen and (max-width: 767px)").matches) {
layout = "mobile";
} else if (window.matchMedia("screen and (min-width: 768px) and (max-width: 1024px)").matches) {
layout = "tablet";
} else if (window.matchMedia("screen and (min-width: 1025px) and (max-width: 1280px)").matches) {
layout = "desktop";
} else if (window.matchMedia("screen and (min-width: 1281px)").matches) {
layout = "xldesktop";
}
window.addEventListener('resize', setCSS, false);
document.getElementById("test").innerHTML = layout;
document.getElementById("mediaquery").href = 'assets/css/mq/device.'+layout+'.css';
})();
</script>
</body>
</html>
最佳答案
您发布的代码中唯一可能导致XSS漏洞的部分是
document.getElementById("test").innerHTML = layout;
如果设置
innerHTML
,并且布局变量中有任何可由用户控制的HTML,则这可能是攻击媒介。但是,在这种情况下,layout
似乎是mobile
,tablet
,desktop
或xldesktop
之一。如果要包括任何用户集内容或来自不受信任来源的内容,则应HTML encode your output。在这种情况下,我不会接受已接受的答案,因为它似乎没有包含对于XSS预防至关重要的单引号或双引号字符,但是Anentropic的答案将确保您的输出在HTML上下文中的输出是安全的。
function htmlEscape(str) {
return String(str)
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
引号字符必须进行编码,因为如果输出到带引号的属性值,则恶意用户可能会逃脱此上下文。请注意,如果输出为未引用的属性值,则必须escape all characters with ASCII values less than 256 except for alphanumeric characters。
另一种方法是使用JQuery,您可以在其中设置
text
属性而不是html
。关于javascript - 代码摘录:这是否会造成XSS漏洞?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25853425/