Javascript安全风险?

Ada*_*dam 16 javascript security

使用Javascript有什么风险以及如何避免它们?

bob*_*nce 17

最常见的错误之一是HTML注入,允许第三方将JavaScript注入您的安全上下文.这允许攻击者控制用户在您网站上执行的操作,从而完全破坏帐户安全性.

虽然尝试让网络作者记住HTML编码字符串,然后输出到服务器端的网页(例如htmlspecialcharsPHP),但是新一代的webapps正在使用相同的愚蠢的字符串连接黑客来创建使用JavaScript在客户端的内容:

somediv.innerHTML= '<p>Hello, '+name+'</p>';
Run Code Online (Sandbox Code Playgroud)

经常使用jQuery:

$('table').append('<tr title="'+row.title+'"><td>'+row.description+'</td></tr>');
Run Code Online (Sandbox Code Playgroud)

这与服务器端HTML注入一样容易受到攻击,作者确实需要停止以这种方式构建内容.您可以在客户端对文本内容进行HTML编码,但由于JS没有内置的HTML编码器,您必须自己完成:

function encodeHTML(s) {
    return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;');
}

somediv.innerHTML= '<p>Hello, '+encodeHTML(name)+'</p>';
Run Code Online (Sandbox Code Playgroud)

但是,使用可用的DOM方法和属性通常可以更好地避免转义:

var p= document.createElement('p');
p.appendChild(document.createTextNode('Hello, '+name);
Run Code Online (Sandbox Code Playgroud)

与jQuery的使用attr(),text()并建立快捷方式:

$('table').append(
    $('<tr>', {title: row.title}).append(
        $('<td>', {text: row.description})
    )
);
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 14

Javascript在客户端运行,因此最大的风险是客户端.风险的一个例子是他们的cookie可能被盗,以便其他用户可以冒充他们.一种常见的攻击方法是通过表单提交将Javascript注入页面.为防止这种情况,您应确保始终正确地转义HTML输出.

你的服务器端的安全性应该依赖于JavaScript的安全.您应该假设您的攻击者可以并且将更改您网页上的HTML/CSS/Javascript以尝试查看通常不可见的信息,并且他们会将数据发送到您的服务器,这些数据无法通过正常接口发送.为了防止这种情况,您应始终验证所有用户输入 - 将其视为完全不受信任的数据.不要依赖关于用户将发送给您的内容的假设 - 始终明确检查您需要的假设是否正确.