好!我们已经看到了什么是正则表达式,如何使用它,一个单词以及如何解决此问题!
如果您跌倒在降落伞中,则本文前两个部分的链接如下:
Parte 1 (Definição do problema)
Parte 2 (Construção de uma possível solução)
现在是时候测试我们的解决方案并对其进行一些考虑。让我们看看我们是否真正构建了什么? ð
首先,我们将执行与最终使整个API崩溃的方法进行相同的测试。
正如我们在下面看到的那样,当使用较早引起问题的相同有效负载时,这次我们的系统没有受到任何影响我们只是收到一条消息,说发生了超时,但是我们的API坚固而强大ð
我们的响应能力测试终点也保持如火如荼。
好吧,我们发现实际上,当API遇到恶意有效载荷时,我们的API并不会更加崩溃。我们必须问自己下一个问题,好吧,它有效,但是每当我们针对给定问题实施解决方案时,该解决方案都会烫伤?< /strong>。 /p>
我们将在高负载下测试API的响应能力,为此,我们将使用称为K6的负载测试工具。 K6是一种用于测试具有不同负载测试场景的应用程序(吸收测试,压力测试等)的工具。这是一个非常工具,我建议对于那些不知道的人,请阅读有关这张脸的更多信息。 Clique aqui e conheça o K6。 接下来,我们有加载测试文件。这是一个简单的测试,基本上我们将根据相当多的同时请求测试我们的API,并查看其对CPU的行为。 遵循另一台计算机上的负载测试,不影响我们的API性能,使用具有4年处理器和8GB RAM的计算机,除了使用可以在群集中爬上Nodejs应用程序的Process Manager PM2攀登我们的API。表格,如果不知道PM2,clique aqui e confira,我得到了300请求的速率/根据考虑到什么计算机不是不太强的结果,并且考虑到内部nodejs是的单独的上下文。我们实现了我们的目标ð。 acevensaã§ãµEs e dicas 此处提出的解决方案对于可能阻止的其他任务(例如Hashens)是可扩展的。如果您不确定该操作是否会被打破或阻止它,则本文中提供的解决方案可能是确保您的系统不会崩溃的一种方式。 这里有一些技巧可以帮助维持远离API的失败。 不要写自己的正则义务:避免创建自己的规则,尤其是如果您不是正则表达式专家,因为您最终以这种失败制定规则的机会是很大。 使用已准备就绪和验证的正则表达式:这是提示1的补充1.如果您需要验证某些东西,以查看已经针对此类故障验证的正则表达式,甚至其他缺陷。 使用验证器:已经准备好验证器可以验证各种模式,并且很可能已经有一个验证器来验证您想要的东西。例如: 如果您需要制作常规,请验证常规:如果您确实需要构建正则表达式,请尝试对其进行验证以了解它是否容易受到失败的影响。有些是: 最后,所有ð 了解她在做什么!研究您要使用的表达,确定她的认识以及她的工作方式,研究正式表达式,至少您能够说出该表达式正在验证。 此建议扩展到您需要使用的所有东西,避免复制和粘贴事物而不知道它在做什么,因为您最终可以将安全漏洞插入系统ð。
今天是伙计们,我希望这篇文章以某种方式帮助您,与上帝甚至附近的ð。
import http from "k6/http";
import { check, sleep } from "k6";
export const options = {
stages: [
{ duration: "2m", target: 250 }, // Simula um aumento de 0 até 100 requisições, em um período de 2 minutos
{ duration: "2m", target: 300 }, // Permaneçe em 300 requisições por 2 min
{ duration: "1m", target: 0 }, // Desce para 0 requisições ao longo de 1 minuto
],
};
const BASE_URL = "http://192.168.2.176:3000"; // Aqui eu coloquei o ip do computador que estava rodando a api, utilizei um outro computador para rodar o teste para garantir que não haveriam interferências
export default () => {
const headers = { "Content-Type": "application/json" };
// Primeiro envio um payload malicioso, simulando um ataque
const maliciusPatternResult = http.post(
`${BASE_URL}/validate-form-safe`,
JSON.stringify({
email: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@gmail.com",
password: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
}),
{ headers: headers }
);
// Verifico para ver se recebi um timeout como resposta
check(maliciusPatternResult, {
"Bad-request-blocked-successfully": (response) => {
return (
JSON.parse(response.body).message === "Email ou senha são inválidos"
);
},
});
// Depois envio um payload válido paar verificar se a api está funcionando como deveria e não foi prejudicada pelo payload malicioso enviado anteriorment
const validPatternResult = http.post(
`${BASE_URL}/validate-form-safe`,
JSON.stringify({
email: "email-valido@gmail.com",
password: "ab.cd.Zz",
}),
{ headers: headers }
);
// Aqui verifico a resposta para checar se a resposta foi correta
check(validPatternResult, {
"Valid-Pattern-Accepted-successfully": (response) =>
JSON.parse(response.body).isValidForm === true,
});
// Por fim faço uma requisição para o endpoint de checagem da api, para ver e ele ainda está respondendo
const serverCheckResponse = http.get(`${BASE_URL}/test-server`).json();
// e verifico se ele de fato está ativo
check(serverCheckResponse, {
"servidor responsivo": (obj) =>
obj.message === "Servidor está respondendo normalmente",
});
sleep(1); // apenas um pequeno timer entre uma iteração do teste e outra
};