减少JavaScript 漏洞的编码技巧

159 阅读5分钟

JavaScript是当今常用的编程语言之一,然而攻击者正在利用 JavaScript 应用程序中的漏洞,使用恶意脚本和会话劫持攻击来创建各种操作,例如会话重定向、敏感数据收集(遵从性破坏)和信息篡改。许多勒索软件变种,如Magniber、Vjw0rm和GootLoader,都利用了JavaScript代码中的漏洞。MageCart组织仅用22行代码就攻破了英国航空公司的Modernizr库。

如何让 JavaScript 更安全?攻击者利用 JS 漏洞的方式有几十种,包括难以反击的攻击,如跨站点脚本 (XSS)、会话劫持、操作系统命令注入、正则表达式(Regex)漏洞利用和扩展注入。通过一些安全习惯可以避免或阻止其中一些攻击。

常见攻击以及如何防御

SQL注入(SQLi)。SQL注入攻击的目标是编码过程和不正确的验证等漏洞,以执行恶意数据库命令。

为了使风险最小化:验证所有输入。不要在代码中使用显式SQL查询,而应该使用对象-关系映射(ORM)。

跨站点脚本(XSS)。攻击者利用 Web 应用程序中缺少验证或编码等漏洞来插入恶意代码。受污染的应用程序将代码作为浏览器端脚本发送给用户,然后攻击者可以访问会话令牌、cookie、密码和其他类型的个人信息。目前有不同类型的XSS攻击 - 反射(非持久)XSS,存储XSS和基于DOM的XSS是最常见的变体。

为了将风险降至最低:不要只信任从用户传递的内容并运行它。确保服务器返回的内容应用匹配的内容类型标头,以确保浏览器以预期的方式解释响应。随时随地应用内容安全策略,以控制哪些内容在您的网站上运行,以及您信任哪些来源的内容。

跨站点请求伪造(CSRF)。CSRF 攻击现在非常普遍。这些漏洞诱使最终用户在使用 Web 应用程序时执行和执行恶意操作。这发生在它们已经过身份验证并开始使用之后。这里使用的主要技术是社会工程,通常是带有正常链接的恶意电子邮件或短信。单击链接后将执行有效负载。

为了最小化风险:使用内置CSRF保护的框架。还可以将CSRF令牌实现到导致操作(状态更改)的所有请求,并在后端对其进行验证。

路径遍历攻击。路径遍历攻击也称为目录遍历攻击,用于未经授权访问存储在 Web 根文件夹外部(相当粗心)的目录、配置文件和敏感密码。

要将风险降到较低:避免将敏感文件存储在Web根文件夹之外。使用文件系统调用时无需用户输入即可工作。另外,确保用户不能通过使用自己的路径代码包围用户输入来提供路径的所有部分。最后,实现强大的代码访问策略(使用chroot jail)来限制可以获取或保存文件的位置。

服务器端请求伪造(SSRF)。SSRF 攻击利用服务器端漏洞执行各种未经授权的活动:访问敏感资源(AWS 元数据)、连接到内部服务、操作数据,甚至修改 URL 以访问来自安全供应商的数据或将客户信息传送到远程服务器。除了使用 HTTP 协议外,SSRF 攻击还可以使用 FTP、SMTP 和 SMB。

为了最小化风险:验证数据和上下文。查找 V4 和 V6 地址。将提供的 IP 地址与受信任的供应商 IP 地址进行交叉检查。不要将数据保存在服务器上;改用 S3 存储桶和 Blobs。为受信任和已识别的域构建区分大小写的白名单。并且永远不要接受来自用户的完整 URL。

敏感的Cookie暴露。敏感数据暴露漏洞有很多变体,但它们都有一个共同的主题:暴露本应加密的信息。攻击者还喜欢利用弱加密密钥(例如,不再被认为是安全的MD5密码散列算法),利用强大的ASIC和GPU进行暴力破解攻击。

为了最小化风险:根据法规要求对所有存储、处理和传输的数据进行分类,并相应地应用控制。丢弃不需要的敏感数据。使用TLS协议加密所有静态数据和传输中的数据,以及PFS密码和其他安全参数。使用HSTS。禁用包含敏感信息的响应的所有缓存。

JavaScript让企业更好地创建应用产品并提高用户体验,但也需要考虑其带来的安全隐患,如业务中断,经济损失,品牌受损等。通过安全编码及源代码安全分析可以尽早检测代码缺陷及漏洞,并及时进行修复。流量还应该通过经过验证和测试的Web应用程序防火墙(WAF)。对增强网络安全来说,使用多种手段总归是更安全。

参读来源:

www.darkreading.com/dr-tech/cod…