Javascript安全风险?

时间:2010-09-25 09:37:40

标签: javascript security

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

3 个答案:

答案 0 :(得分:15)

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

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

somediv.innerHTML= '<p>Hello, '+name+'</p>';

经常使用jQuery:

$('table').append('<tr title="'+row.title+'"><td>'+row.description+'</td></tr>');

这与服务器端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>';

然而,使用可用的DOM方法和属性通常会更好,无需转义:

var p= document.createElement('p');
p.appendChild(document.createTextNode('Hello, '+name);

并使用jQuery使用attr()text()和创建快捷方式:

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

答案 1 :(得分:12)

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

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

答案 2 :(得分:-4)

没有风险。可能程序员的错误。我能想到的一个错误是忘记url编码发送到服务器的参数,它得到错误的值。但真正的安全风险在于服务器端代码,而不是javascript。