客户端 Web 应用程序中是否可能存在 XSS 漏洞?
Is it possible to have XSS vulnerability in a client side web application?
我对安全概念不熟悉。我有一个用 javascript 编写的程序,因此在浏览器中只能是 运行。我想知道有没有办法在这个程序中注入 javascript 代码?
我的程序如下所示:
index.html:
<form method="get" action="file.html">
Enter your name: <input name="name" type="text"> <input type="submit" value="enter">
</form>
file.html:
<head>
<script src="js/main.js"></script>
</head>
<body>
<div id="contents">
</div>
</body>
js/main.js:
function get_parameters() {
// 1. get the string of the get parameters after question mark
var parameters = window.location.search.substr(1);
// 2. make an array of parameters
parameters = parameters.split('&')
// 3. retrieve parameters
var res = {}
parameters.forEach(function (item) {
var tmp = item.split('=');
res[tmp[0]] = decodeURIComponent(tmp[1]);
})
// 4. return parameters
return res;
}
window.onload = function () {
var parameters = get_parameters();
if ('name' in parameters) {
document.getElementById('contents').innerHTML = '<div> Hello ' + parameters['name'] + '</div>';
}
};
可以通过 url 插入脚本。如果您访问 file.html?name=%3Cimg%20onerror%3Dalert(1)%20src%3D/%3E
,那么您应该会看到一个警报。
innerHTML
属性 的使用是设置 HTML 包含用户控制的内容。如果改为使用 innerText
则不可能。例如:
document.getElementById('contents').innerText = 'Hello ' + parameters['name'];
我对安全概念不熟悉。我有一个用 javascript 编写的程序,因此在浏览器中只能是 运行。我想知道有没有办法在这个程序中注入 javascript 代码? 我的程序如下所示:
index.html:
<form method="get" action="file.html">
Enter your name: <input name="name" type="text"> <input type="submit" value="enter">
</form>
file.html:
<head>
<script src="js/main.js"></script>
</head>
<body>
<div id="contents">
</div>
</body>
js/main.js:
function get_parameters() {
// 1. get the string of the get parameters after question mark
var parameters = window.location.search.substr(1);
// 2. make an array of parameters
parameters = parameters.split('&')
// 3. retrieve parameters
var res = {}
parameters.forEach(function (item) {
var tmp = item.split('=');
res[tmp[0]] = decodeURIComponent(tmp[1]);
})
// 4. return parameters
return res;
}
window.onload = function () {
var parameters = get_parameters();
if ('name' in parameters) {
document.getElementById('contents').innerHTML = '<div> Hello ' + parameters['name'] + '</div>';
}
};
可以通过 url 插入脚本。如果您访问 file.html?name=%3Cimg%20onerror%3Dalert(1)%20src%3D/%3E
,那么您应该会看到一个警报。
innerHTML
属性 的使用是设置 HTML 包含用户控制的内容。如果改为使用 innerText
则不可能。例如:
document.getElementById('contents').innerText = 'Hello ' + parameters['name'];