bob*_*nce 17
最常见的错误之一是HTML注入,允许第三方将JavaScript注入您的安全上下文.这允许攻击者控制用户在您网站上执行的操作,从而完全破坏帐户安全性.
虽然尝试让网络作者记住HTML编码字符串,然后输出到服务器端的网页(例如htmlspecialchars
PHP),但是新一代的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, '&').replace(/</g, '<').replace(/"/g, '"');
}
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以尝试查看通常不可见的信息,并且他们会将数据发送到您的服务器,这些数据无法通过正常接口发送.为了防止这种情况,您应始终验证所有用户输入 - 将其视为完全不受信任的数据.不要依赖关于用户将发送给您的内容的假设 - 始终明确检查您需要的假设是否正确.
归档时间: |
|
查看次数: |
41319 次 |
最近记录: |