我在
HTML5
Javascript中编写了一些代码,当用户在User中输入他的名字时,它会像“Hello< user>”一样反映出来.现在这个脚本容易受到XSS(跨站点脚本)的攻击.
这是我的代码:
<!DOCTYPE html>
<html>
<head>
<Meta charset="utf-8"/>
<title>Forms Welcome</title>
<script>
function write_name(){
var welcome_parra = document.getElementById('welcome');
var name = document.getElementById('name');
welcome_parra.innerHTML = "welcome " + name.value;
}
</script>
</head>
<body>
<p id="welcome"></p>
<form>
Username: <input type="text" name="username" maxlength="20" id="name"/>
<input type="button" value="done"onclick="write_name();">
</form>
/body>
</title>
现在,当我输入有效负载“>< img src = x onerror = prompt(404)>”时,我会收到XSS的提示.那么我该如何纠正呢?
任何人都可以检查主机,尝试修补错误,并给我一个理由?
解决方法
您可以对输入进行HTML编码,使其对XSS安全.
添加功能:
添加功能:
function escapeInput(input) {
return String(input)
.replace(/&/g,'&')
.replace(/"/g,'"')
.replace(/'/g,''')
.replace(/</g,'<')
.replace(/>/g,'>');
}
并编码用户输入:
<script>
function write_name(){
var welcome_parra = document.getElementById('welcome');
var name = document.getElementById('name');
welcome_parra.innerHTML = "welcome " + escapeInput(name.value);
}
</script>