Serverless 架构的出现让前端工程师可以更好地构建应用,轻松处理任务的扩展性和容错性。然而,由于服务器被放在云供应商中,Serverless 应用也需要遵循安全性最佳实践来保护用户数据和个人信息。在本文中,我们将介绍一些 Serverless 应用避免被攻击的方法。
禁用不必要的功能
在 Serverless 中,应该仅分配所需的服务。当你要生成一些小型的 Serverless 函数时,请仅为其分配一些仅仅所需的功能。例如,您可能不需要定义 IAM 角色、CloudWatch Metrics、API Gateway、Lambda 明细监控和 Lambda 写入语音,这些都会耗费资金和影响性能。只需在运行您的应用程序所需的极小角色上进行部署就可以了。
以下是一段示例代码,说明了如何绕过请求 API 的权限:
-- -------------------- ---- ------- - --------- - ---------- - --- ----------- --- ---------- ----------- --- ------ ------- - ------------- - ------------- - --------------- -------- --- - ----- ------------------------ --------------- ------ ----------- ----- ---------------- ------------ -------- ---------- --- ---- -------- --------- ----- --------------------------- ---------- ----------------------- -----------
处理身份验证和授权
在 Serverless 中,身份验证和授权是至关重要的。确保所有 API 调用都得到正确授权,以防止未经授权的访问和数据泄露。应该提供多层次的保护,包括:
- AWS IAM 角色
- AWS KMS
- Cognito 用户池
- OAuth2
以下是一段示例代码,显示了如何在 Lambda 函数中设置身份验证:
-- -------------------- ---- ------- - - --- ---------------- - ----- ------------------------- ----------- ---------- ---- ------- ----------- ---- ------------------ ----------- --- ------------------ ---- ------------ ---------------------- --- ----- --------- ---- ---- ----------------------------- ------------------ ---------------------------- ------------------------------- ---------------- - ----------- --- -------------------- - ------
防范内置的攻击
虽然 AWS 很安全,但你需要抵御不良用户和自然灾害。
- 防火墙:配置网络防火墙定期更新和策略变更。
- 限制资源访问:控制身份验证和授权。
- 防范跨站点脚本(XSS):避免接受未经检查的输入、对 JavaScript 做出不良反应,使用模板化字符串规范化输出。
- 防范不安全的 SQL 注入:不要拼接 SQL 表达式。输入应该被规范化,以排除不安全的脚本和字符。
- 防范内部数据泄露:限制内部角色的访问权限。
以下是一些涉及前端应用的攻击类型:
XSS 攻击
跨站脚本(XSS)攻击是利用非法脚本注入到网站中来窃取网站用户隐私的一种攻击方式。常见的攻击方式如下:
- 变量注入:在表单中注入脚本。
- URL 注入:在 URL 规范化中注入脚本。
响应方式:
describe('XSS', function() { it('should tag as unsafe', function() { const input = 'word<script>test</script>' const output = boilerplateXSS(input); expect(output).to.eql('word{{-- unsafe --}}<script>test</script>'); }); });
SQL 注入
SQL 注入是向 SQL 数据库非法注入脚本的一种攻击方式。攻击者注入脚本的目的是访问、修改、挂起关系数据库,甚至会盗走用户数据。
响应方式:
describe('SQL', function() { const query = 'SELECT form, name FROM users WHERE `id` = "${id}"'; it('should not be possible to inject SQL code', function() { const id = '1 OR True'; const result = mysql.query(_.template(query)({id: id})); assert.equal(result, false); }); });
总结
在本文中,我们提供了一些 Serverless 应用保护用户数据和避免被攻击的方法。首先,禁用不必要的功能,只需为应用程序所必须的功能分配服务。其次,处理身份验证和授权,包括 AWS IAM 角色、AWS KMS、Cognito 池和 OAuth2。最后,需要抵御内置的攻击,如跨站点脚本(XSS)和 SQL 注入。通过这些方法,我们可以保证 Serverless 应用程序的安全性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6474178c968c7c53b01867d9