有人能为JavaScript推荐安全的编码指南吗?
是否有一组与JavaScript编程语言密切相关的常见漏洞?我正在寻找的是与堆栈、堆或缓冲区溢出相当的漏洞,这些漏洞与c/c++编程语言密切相关。
可以推荐JavaScript上下文中的静态代码分析工具吗?
发布于 2018-03-29 10:13:17
Full公开:下面的指南是由 查克马克斯的研究团队编写的,他是 CxSAST <#>(静态代码分析工具)的创建者,我就是在这里工作的。
以下是JavaScript安全编码实践指南:
由于现在在应用程序的前端和后端都使用了JavaScript,所以在JavaScript中开发时,大量的漏洞和问题是相关的,也是非常重要的:
举几个例子。:)
发布于 2020-02-19 10:04:15
我写了一篇关于JavaScript漏洞的文章,所以我相信我能在这里有所帮助:
javascript中的大多数安全漏洞都是最终用户交互的结果。
恶意用户可以将查询字符串输入表单以访问或污染受保护的数据。
因此,在用户输入上添加验证中间件是工程团队的责任。
下面列出了最常见的JavaScript漏洞:
跨站点脚本(XSS)
涉及web应用程序和JavaScript的最常见攻击之一是跨站点脚本漏洞,这些漏洞包含在OWASP十大web应用程序安全风险中。
XSS攻击是web应用程序中的一个缺陷,允许恶意用户在网站上执行JavaScript代码,因此它很受欢迎,因为几乎每个网站都需要在用户浏览器中打开JavaScript。
跨站点脚本主要有两种类型,即- Client XSS - Server XSS
Client XSS
当使用来自远程位置的不可信数据(主要是API)用不安全的JavaScript调用更新DOM时,就会出现这种漏洞。例如,下面的代码片段从不受信任的API中获取天气信息,以显示当前天气信息。
DEMO XSS
Today's weather information reads:
let untrusted_ajax_res = document.write(location.replace("https://www.w3schools.com"));
document.getElementById("temp").innerHTML=untrusted_ajax_res;
The snippet above shows how malicious code from an untrusted API can be injected into the DOM.
To prevent client xss attacks, developers can install secure xss filters which can be used to sanitise inputs gotten from untrusted domains/locations. A snippet for a web use-case can be seen below:
...
let untrusted_ajax_res = document.write(location.replace("https://www.w3schools.com"));
document.getElementById("temp").innerHTML=xssFilters.inHTMLData(untrusted_ajax_res);-The xss-过滤器包只能应用于UTF-8编码文档.HTML5模式也是必需的。
当不受信任的数据作为用户输入并发送到后端以存储在数据库中时,就会出现Server XSS这种漏洞。此数据用于计算要发送回用户的响应,该响应在发送回用户时包含恶意JavaScript代码。
服务器XSS攻击基于快递的节点服务器的示例可以在下面的代码段中看到:
...
app.get('/search', (req, res) => {
const results = db.search(req.query.product);
if (results.length === 0) {
return res.send('No results found for "' + req.query.product + '"');
}
...
});上面的片段显示了http://www.domain.com产品搜索路径的定义。XSS攻击可以通过将javascript代码作为服务器的查询来执行,如下所示:
https://www.domain.com/search?product=alert(XSS:Gat Ya!!)因为不会有这样的记录
alert(XSS:Gat Ya!!)在数据库中,服务器的响应将是:
No results found for "alert(XSS:Gat Ya!!) 在接收到服务器的响应后,没有显示结果,然后将脚本注入DOM以给出如下所示的输出:

尽管这看起来并不严重,因为这个脚本并不构成任何严重的威胁。然而,攻击者可以将恶意代码保存为博客/社交媒体站点中的“评论”。这些所谓的注释,当服务给其他用户,然后注入到DOM中,并执行攻击者的愿望。要修复此漏洞,可以使用npm安装xss-filter包,如下所示:
$ npm i xss-filters --save安装之后,我们现在可以在服务器响应中过滤用户的输入,如下所示:
...
var xssFilters = require('xss-filters');
app.get('/search', (req, res) => {
var productParam = req.query.product;
const results = db.search(req.query.product);
if (results.length === 0) {
res.send('No result found for "' + xssFilters.inHTMLData(productParam) + '"');
}
});
...SQL注射液
SQL注入是一种攻击,它可以执行SQL语句来控制web应用程序后面的数据库。在下面的代码片段中可以看到SQL注入攻击:
...
const db = require('./db');
app.get('/products', (req, res) => {
db.query('SELECT * FROM products WHERE id = ' + req.query.id);
.then((product) => {
...
res.send(product);
})
});上面的代码片段有两处问题:
在上面的片段中,数据库客户端将作为第一个参数传入req.query.id。尽管节点的MySQL包不支持参数化查询,但在将其与查询字符串连接之前,可以转义用户输入(即删除所有特殊字符),如下所示:
const query = 'SELECT * FROM products WHERE id = ' + connection.escape(req.query.id);https://security.stackexchange.com/questions/182481
复制相似问题