客户端 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'];