所以我对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>
答案 0 :(得分:0)
您发布的代码中唯一可能导致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。