如何通过数据验证防止 Web API 攻击 - Web API 安全指南

这篇具有很好参考价值的文章主要介绍了如何通过数据验证防止 Web API 攻击 - Web API 安全指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

充分的数据保护和用户保密是网页开发者的主要责任。因此,在构建 API 终端时,确保最高可能的安全性至关重要。

应用程序安全是客户端和服务器开发者共同的责任,一方的疏忽可能会造成灾难性后果。统计数据显示,2023 年的数据泄露导致全球超过 800 万个数据记录暴露。

在本文中,我将重点介绍 API 安全的关键领域,其中包括数据验证。这个概念对帮助您保护 API 免受通过恶意用户数据进行的网络攻击非常重要。这个教程非常适合所有后端开发者,无论经验多少。

为了能够跟随本教程,这里有一些先决条件:

  • Node.js 知识
  • npm 和包安装知识

有了这些准备,让我们开始吧。

(本文内容参考:java567.com)文章来源地址https://www.toymoban.com/news/detail-851917.html

数据验证是如何工作的?

首先,什么是数据验证?数据验证简单来说就是确保来自外部来源的数据在进行进一步数据处理之前的准确性和可靠性。

这是 Web API 安全的关键组成部分,因为它对于防止网络注入攻击、SQL 攻击和 NoSQL 攻击至关重要。要了解更多信息,您可以查看此链接。

请注意,数据验证不仅仅需要在以下后端操作中进行:

  • 用户登录和注册
  • 响应查询
  • 更新服务器数据库

所有这些都可能被恶意黑客利用,以获取对服务器数据库的访问权限,并获取敏感用户详细信息,甚至通过格式化整个数据库来制造混乱。

流行的数据验证工具

到目前为止,有很多工具可以帮助程序员在 API 开发中实现高效的数据验证。

它们帮助您避免重新发明验证数据的长正则表达式代码的轮子。它们提供了大量功能,包括错误处理和验证定制功能。

其中一些工具包括:

  • Joi
  • Zod
  • Yup
  • AJv
  • Valibot
  • Validator.js
  • Superstruct

为了进一步阐明这些工具,我们将比较上述最受欢迎的数据验证工具中的一些。

数据验证工具的优缺点

为了进一步让您了解这些 JavaScript 验证工具,我将重点介绍其中三种流行的 JavaScript 验证工具的一些优缺点。

Joi

优点
  • 拥有强大的、庞大的用户社区和开发支持
  • 具有处理复杂验证的内置功能
缺点
  • 其语法相当冗长

Zod

优点
  • 与 TypeScript 项目轻松兼容
  • 具有高效的错误处理能力
缺点
  • 不支持异步验证。

Yup

优点
  • 主要使用声明性语法设置其验证工具,从而赋予其简单性
  • 具有可比较的快速性能。
缺点
  • 不提供自定义功能
  • 其处理复杂验证的能力有限

为了本教程的目的,我们将使用 Joi 作为我们的数据验证工具。

简介 Joi

Joi 是一个简单高效的基于 JavaScript 的数据验证工具,它基于模式类型配置。

它具有用于验证各种形式数据出现的内置功能,但不限于布尔值、字符串、函数和区间。它还可以处理复杂的验证操作。

此外,它提供了最小化的缓存功能。有关该工具的更多信息可以在此处找到。

如何设置 Joi

在本节中,我们将在本地环境中设置 Joi。要安装 Joi,请通过命令行导航到代码文件夹,并运行以下命令:

npm i joi

应该显示安装成功的消息。完成后,我们可以演示在我们的演示 API 中使用 Joi 验证用户注册的强大功能。

演示项目

在这个项目中,您将使用 Joi 来验证从客户端接收到的用于在服务器上注册的输入。可以在这里找到用于 Node.js 应用程序的用户注册功能的默认代码。

继续将已安装的 Joi 包导入到您的代码中:

const Joi = require("joi");

在编写我们的注册控制器之前,我们将在代码文件中初始化 Joi 库:

const SignUpSchema = Joi.object({});

在这个项目中,我们将验证从客户端接收到的 email、password 和 username 参数。

const SignUpSchema = Joi.object({
    email: Joi.string().email({
        minDomainSegments: 2,
        tlds: {
            allow: ['com', 'net']
        }
    }),
    username: Joi.string().alphanum().min(3).max(15).required(),
    password: Joi.string().min(8).required()
});

email 参数对象确保电子邮件地址是一个字符串,并且域站点限制为 .com 和 .net,不允许其他形式的域。

对于 username 参数,它确保它是一个包含字母和数字的字符串,最小字符数为 3,最大字符数为 15。required 函数确保必须满足这些条件,否则整个请求将无法通过验证。

password 参数确保提供的密码是以字符串格式提供的,最小字符数为 8,并且也是必需的。

要将其应用到我们的端点中,我们将其包含在控制器函数中:

const { error, value } = SignUpSchema.validate(req.body, { abortEarly: false });
if (error) {
    res.status(400).json(error.details);
    return;
}

此函数在将用户详细信息插入数据库之前执行。模式尝试验证接收到的输入,然后如果成功验证,继续到数据库。

abortEarly 功能包括以允许评估所有参数。如果有任何错误,所有错误都将显示出来。

以上内容也可以在登录控制器函数中复制。您还可以查看 Joi 使用其他复杂验证选项的文档。

项目的最终代码如下所示:

const jwt = require("jsonwebtoken");
const userSchema = require("../Schema/User");
const Joi = require("joi");
const bcrypt = require("bcrypt");
const { createNewColumn, checkRecordsExists, insertRecord } = require('../utils/sqlSchemaFunction');

const generateAccessToken = (use) => {
    return jwt.sign({ userID: use }, process.env.JWT, { expiresIn: "1d" });
}

const SignUpSchema = Joi.object({
    email: Joi.string().email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } }),
    username: Joi.string().alphanum().min(3).max(15).required(),
    password: Joi.string().min(8).required()
});

const loginSchema = Joi.object({
    email: Joi.string().email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } }),
    password: Joi.string().min(8).required()
});

const register = async (req, res) => {
    const email = req.body.email;
    const password = req.body.password;

    if (!email || !password) {
        res.status(400).json("Please supply the email or password");
        return; 
    }

    const { error, value } = SignUpSchema.validate(req.body, { abortEarly: false });
    if (error) {
        res.status(400).json(error.details);
        return;
    }

    const salt = await bcrypt.genSalt(10);
    const hashedPassword = await bcrypt.hash(password, salt);
    const user = {
        username: req.body.username,
        email: email,
        password: hashedPassword
    };

    try {
        const userAlreadyExists = await checkRecordsExists("users", "email", email);
        if (userAlreadyExists) {
            res.status(400).json("Email must be unique");
        } else {
            await insertRecord("users", user);
            res.status(200).json("User created successfully");
        }
    } catch (err) {
        res.status(500).json({ err: err.message });
    }
};

module.exports = { register };

如何通过数据验证防止 Web API 攻击 - Web API 安全指南,前端,安全,后端,node.js

在 Postman 中进行 API 测试

确保代码遵循我们定义的模式,结果是成功执行的。

结论

至此,教程已经结束。希望您已经了解了数据验证、各种数据验证工具以及数据验证最佳实践。

(本文内容参考:java567.com)

到了这里,关于如何通过数据验证防止 Web API 攻击 - Web API 安全指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学习前端安全:防止常见的Web攻击和漏洞:简单而有效

    作者:禅与计算机程序设计艺术 安全是所有Web开发人员都需要关注的一个重要方面,因为信息在网络上传输时都存在各种隐患。攻击者利用这些隐患对我们的网站造成破坏,甚至导致服务器被入侵。因此,在Web开发过程中,我们需要对安全问题保持警惕并采取必要的措施保障

    2024年02月11日
    浏览(48)
  • 高防IP如何防止爬虫和Web攻击?

    高防IP如何防止爬虫和Web攻击?随着互联网的发展,各种类型的网络攻击和爬虫行为也越来越多。为了保护网站的安全和稳定性,许多网站都采用了高防IP来防止爬虫和Web攻击。那么高防IP是如何防止爬虫和Web攻击的呢?下面我们来详细了解一下。 1. 防止爬虫 爬虫是指通过程

    2024年02月11日
    浏览(50)
  • 如何防止网络安全攻击

    为了防止网络安全攻击,以下是一些常见的防御措施和建议: 使用强密码:确保使用足够长、复杂且随机的密码,并定期更改密码。不要在多个账户中重复使用相同的密码。 更新和修补软件:定期更新操作系统、应用程序和安全补丁,以及及时修复安全漏洞,以防止攻击者

    2024年02月09日
    浏览(62)
  • 前端安全系列(一):如何防止XSS攻击?

    随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点。在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,又时常遭遇网络劫持、非法调用 Hybrid API 等新型安全问题。当然,浏览器自身也在不断在

    2024年02月02日
    浏览(72)
  • https 是否真的安全,https攻击该如何防护,https可以被抓包吗?如何防止呢?

    简单来说, https 是 http + ssl,对 http 通信内容进行加密,是HTTP的安全版,是使用TLS/SSL加密的HTTP协议 Https的作用: 内容加密 建立一个信息安全通道,来保证数据传输的安全; 身份认证 确认网站的真实性 数据完整性 防止内容被第三方冒充或者篡改 其次什么事SSL证书 SSL 由

    2024年02月03日
    浏览(49)
  • 腾讯EdgeOne产品测评体验——多重攻击实战验证安全壁垒:DDoS攻击|CC压测|Web漏洞扫描|SQL注入

    🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长! 在一个阳光明媚的下午,我收到了一个特别的邀请:对腾讯云EdgeOne(简称EO),一款致力于提速和加强网站安全的边缘安全加速平台,进行深度

    2024年04月17日
    浏览(44)
  • 【web安全】XSS攻击(跨站脚本攻击)如何防范与实现

    目录 XSS介绍 防范要点 实现方法 XSS攻击(跨站脚本攻击)是一种常见的Web安全漏洞,攻击者在Web页面中插入恶意脚本代码,并在受害人访问该页面时执行脚本代码,从而获取用户敏感信息、操作受害人账号或篡改页面内容等不当行为。XSS攻击可以通过输入表单、搜索框、评论

    2024年02月12日
    浏览(51)
  • 如何进行安全可靠的API身份验证?

    前言: 在开发安全的 REST API 时,身份验证是必不可少的。你可以将你的应用程序想象成一个聚会,那么身份验证就像一扇门,决定哪些客人可以进入——或者更准确地说,哪些请求可以进出。 接下来我将介绍四种常用的身份验证方法,包括 API密钥、OAuth 2.0、HTTP身份验证方

    2024年02月08日
    浏览(35)
  • 电商系统中API接口防止参数篡改和重放攻击(小程序/APP)

    说明:目前所有的系统架构都是采用前后端分离的系统架构,那么就不可能避免的需要服务对外提供API,那么如何保证对外的API的安全呢? 即 生鲜电商中API接口防止参数篡改和重放攻击 目录 1. 什么是API参数篡改? 说明:API参数篡改就是恶意人通过抓包的方式获取到请求的接

    2024年02月03日
    浏览(46)
  • MySQL 安全及防止 SQL 注入攻击

    如果通过网页获取用户输入的数据并将其插入  MySQL  数据库,那么就有可能发生  SQL 注入攻击的安全问题 作为研发,有一条铁律需要记住,那就是 永远不要相信用户的数据,哪怕他一再承诺是安全的 SQL  注入,就是通过把  SQL  命令插入到  Web  表单递交或输入域名或页

    2024年02月02日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包