JavaScript应用程序安全:初学者必知的十大漏洞

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

JavaScript应用程序安全:初学者必知的十大漏洞

\n\n

使用JavaScript(尤其是在Node.js环境中)进行开发,为创建现代Web应用程序提供了广阔的可能性。然而,能力越大,责任越大。忽视安全问题可能导致数据泄露、财务损失和声誉受损。对于初学者开发者来说,理解主要威胁是编写安全代码的第一步。本文将基于OWASP列表,通过代码示例和实用防护建议,为您解析JavaScript(Node.js)的十大漏洞。

\n\n

1. 跨站脚本攻击(XSS)

\n

XSS是最常见的攻击之一。攻击者将恶意脚本注入网页,该脚本会在受害者的浏览器中执行。在Node.js中,这通常发生在未对输出数据进行转义的情况下。

\n\n

易受攻击的代码示例(Express):

\n
app.get('/user/:name', (req, res) => {\n  res.send('<h1>你好,' + req.params.name + '</h1>');\n});\n
\n\n

如何防护:使用具有自动转义功能的模板引擎(例如Handlebars、EJS)或类似helmet的库。切勿将用户输入直接插入HTML。

\n\n
app.get('/user/:name', (req, res) => {\n  const safeName = encodeURIComponent(req.params.name);\n  res.send(`<h1>你好,${safeName}</h1>`);\n});\n
\n\n

2. SQL注入

\n

如果您的应用程序使用SQL数据库(例如PostgreSQL或MySQL),不正确的查询处理可能导致执行任意SQL代码。

\n\n

易受攻击的代码:

\n
const query = `SELECT * FROM users WHERE email = '${userInput}'`;\ndb.query(query, callback);\n
\n\n

解决方案:始终使用参数化查询或ORM(例如Sequelize、Prisma)。

\n\n
const query = 'SELECT * FROM users WHERE email = $1';\ndb.query(query, [userInput], callback);\n
\n\n

3. 跨站请求伪造(CSRF)

\n

CSRF攻击会诱使用户在其已认证的网站上执行非预期的操作,例如转账或修改密码。

\n\n

防护措施:使用CSRF令牌。在Express中,流行的库是csurf(已弃用,但已被csrf-csrf或框架内置解决方案取代)。

\n\n
const csrf = require('csrf-csrf');\nconst { generateToken } = csrf();\n\napp.post('/transfer', (req, res) => {\n  const token = req.body._csrf;\n  if (!validateToken(token)) {\n    return res.status(403).send('CSRF攻击');\n  }\n  // 执行转账\n});\n
\n\n

4. 不安全的依赖项

\n

Node.js应用程序使用成千上万个npm包。过时或存在漏洞的依赖项是常见的攻击原因。

\n\n

建议:

\n
    \n
  • 定期运行npm audit检查漏洞。
  • \n
  • 使用snyk或Dependabot进行自动更新。
  • \n
  • 删除未使用的包。
  • \n
\n\n

5. 不安全的身份验证和会话管理

\n

弱密码、缺少登录尝试次数限制、会话令牌存储不当——这些都会导致账户被入侵。

\n\n

最佳实践:

\n
    \n
  • 以哈希形式存储密码(bcrypt、argon2)。
  • \n
  • 使用具有短生命周期和刷新令牌的JWT。
  • \n
  • 设置登录尝试次数限制(速率限制)。
  • \n
\n\n
const bcrypt = require('bcrypt');\nconst saltRounds = 10;\n\n// 注册\nconst hash = await bcrypt.hash(password, saltRounds);\n\n// 登录\nconst match = await bcrypt.compare(inputPassword, hash);\n
\n\n

6. 访问控制缺陷

\n

用户

博客

书籍推荐