使用Javascript有什么风险?如何避免它们?
答案 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, '&').replace(/</g, '<').replace(/"/g, '"');
}
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。