使用Javascript的风险是什么?如何避免它们?
发布于 2010-09-25 18:25:47
最常见的错误之一是HTML注入,它允许第三方将JavaScript注入到您的安全上下文中。这允许攻击者控制用户在您的站点上的操作,完全破坏了帐户安全。
虽然有一些缓慢的进展试图让网页作者记住他们在服务器端输出到网页中的HTML编码字符串(例如PHP中的htmlspecialchars ),但新一代web应用程序正在使用相同的愚蠢字符串连接技巧来使用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})
)
);发布于 2010-09-25 17:40:21
Javascript在客户端运行,因此最大的风险在于客户端。风险的一个例子是,他们的cookie可能会被窃取,以便其他用户可以冒充他们。一种常见的攻击方法是通过表单提交将inject Javascript插入页面。为了防止出现这种情况,您应该确保始终正确地转义HTML输出。
您的服务器端安全性应该是而不是依赖于Javascript的安全性。您应该假定您的攻击者能够并将更改您页面上的HTML/CSS/Javascript,以尝试查看通常不可见的信息,并且他们将向您的服务器发送不应该通过正常接口发送的数据。为了防止这种情况,您应该始终验证所有用户输入-将其视为完全不受信任的数据。不要依赖于你的用户将发送给你的内容的假设--总是明确地检查你所要求的假设是正确的。
发布于 2010-09-25 17:40:37
没有任何风险。可能是程序员的错误。我能想到的一个错误是忘记对发送到服务器的参数进行url编码,结果服务器得到了错误的值。但真正的安全风险在于服务器端的代码,而不是javascript。
https://stackoverflow.com/questions/3793246
复制相似问题