首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript安全风险?

Javascript安全风险?
EN

Stack Overflow用户
提问于 2010-09-25 17:37:40
回答 3查看 43.2K关注 0票数 17

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-25 18:25:47

最常见的错误之一是HTML注入,它允许第三方将JavaScript注入到您的安全上下文中。这允许攻击者控制用户在您的站点上的操作,完全破坏了帐户安全。

虽然有一些缓慢的进展试图让网页作者记住他们在服务器端输出到网页中的HTML编码字符串(例如PHP中的htmlspecialchars ),但新一代web应用程序正在使用相同的愚蠢字符串连接技巧来使用JavaScript在客户端创建内容:

代码语言:javascript
复制
somediv.innerHTML= '<p>Hello, '+name+'</p>';

经常使用jQuery:

代码语言:javascript
复制
$('table').append('<tr title="'+row.title+'"><td>'+row.description+'</td></tr>');

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

代码语言:javascript
复制
function encodeHTML(s) {
    return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;');
}

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

然而,使用可用的DOM方法和属性通常要好得多,这些方法和属性消除了转义的需要:

代码语言:javascript
复制
var p= document.createElement('p');
p.appendChild(document.createTextNode('Hello, '+name);

在jQuery中使用attr()text()和创建快捷键:

代码语言:javascript
复制
$('table').append(
    $('<tr>', {title: row.title}).append(
        $('<td>', {text: row.description})
    )
);
票数 17
EN

Stack Overflow用户

发布于 2010-09-25 17:40:21

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

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

票数 14
EN

Stack Overflow用户

发布于 2010-09-25 17:40:37

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

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3793246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档