发布于 2026-01-06 2 阅读
0

简单的 Mudanças,伟大的影响:Como Fortalecer 和 Segurança da Sua Aplicação Laravel

简单的 Mudanças,伟大的影响:Como Fortalecer 和 Segurança da Sua Aplicação Laravel

通过 Laravel 项目的开发,您可以了解 Laravel 的框架结构,并了解其开发过程。 Mas,você já se perguntou se não pode estar deixando passar algum erro?是否可以使用简单的方法来逃离困境,这对于保证系统的安全至关重要?

大部分人都犯了“简单”的错误,但我们必须共同解决这些问题。


Fazendo um deploy seguro 🚀

公共项目在互联网上的存在是必要的环境是生产/同源环境的一部分,或者是植入场景的条件,因为APP_ENV可能APP_DEBUG存在环境漏洞。

有资格使用这些钱吗?

  • APP_ENV = 标记应用程序环境,例如“本地”、“生产”、“登台”、“测试”等。
  • APP_DEBUG = 标记当前环境的调试模式,以布尔值接收。

使用环境配置选项。

APP_ENV=local
APP_DEBUG=true
Enter fullscreen mode Exit fullscreen mode

使用产品环境配置。

APP_ENV=production
APP_DEBUG=false
Enter fullscreen mode Exit fullscreen mode

用户在产品配置方面遇到的问题有哪些?

如果 Laravel 应用程序没有 modo 调试功能,则可能会出现一些严重错误,因此,请注意周围环境,并注意以下信息:

  • Trechos de código.
  • PHP 和 Laravel 也一样。 (Pode ser utilizado para explorar falhas de segurança conhecidas das versões)
  • 使用和密钥秘密的信息。
  • Senha do banco de dados.
  • Estado da chave APP_ENV.

一个新的环境条件是“本地”的勇气,但它可能会带来更多的漏洞,这就是望远镜的用途,因此必须登录才能使用系统中的算法功能或确定流量的 APP_ENV。例如,一个用于外部 api 消费的连续配置:

'api_service' => [
    'key' => env('APP_ENV') === 'production' ? env('API_KEY_PROD') : env('API_KEY_DEV')
]
Enter fullscreen mode Exit fullscreen mode

验证输入🔍

Todo desenvolvedor já deve ter escutado em algum momento da vida “Não confie no usuário” and neste artigo você irá ver mais um motivo para pensar assim。

想象一下接下来的场景,您可以在电子商务中使用我们的产品配方,以获取其功能,但不能使用任何配方,并且valor不允许更改产品的配方非授权功能。

Esta é a tabela produtos

ID 勇气 诺姆 数量 代码 setor_id
1 100 帕内拉 4 PAN10323 3
... ... ... ... ... ...

请填写表格请求

public function rules(): array
{
    return [
        'nome' => 'string|max:255',
        'quantidade' => 'integer|min:0',
        'codigo' => 'string|max:255|unique:itens,codigo',
        'setor_id' => 'exists:setores,id',
    ];
}
Enter fullscreen mode Exit fullscreen mode

Esta é a função utilizada no seucontroller

public function FuncionarioUpdateItem(UpdateItemRequest $request, $id)
{
    $item = Item::findOrFail($id);

    $result = $item->update($request->all());

    return response()->json(['sucesso' => $result], 200);
}
Enter fullscreen mode Exit fullscreen mode

验证和验证相关信息,作为验证论坛的有效性和顺序的依据。没有任何变化,这是一个巨大的变化:需要考虑的公式是需要的四项条件。

是否有可能发生恶意更改手册或 HTML 页面的问题?您是否入侵了 API 平台的要求,例如 Postman,包括要求的价值?

Digamos que o usuário malicioso enviou os seguintes bados para a rota:

{
   valor: 1,
   nome: 'Panela barata',
}
Enter fullscreen mode Exit fullscreen mode

您可以通过以下方式注册产品:

ID 勇气 诺姆 数量 代码 setor_id
1 1 帕内拉·巴拉塔 4 PAN10323 3
... ... ... ... ... ...

Agora o 产品 que custava R$ 100 acabou disponível por R$ 1, eo 问题 está na form de extrair os bado do request.

错误❌

$request->all();
Enter fullscreen mode Exit fullscreen mode
  • Assim é retornado TODOS os bados 确实有要求。

Certo ✅

$request->validated();
Enter fullscreen mode Exit fullscreen mode
  • Assim é retornado APENAS os bados validos do request.

Se o控制器使用与 dados 接收相关的形式的示例,或显示有效负载恶意软件结果的示例,而不是后续注册:

ID 勇气 诺姆 数量 代码 setor_id
1 100 帕内拉·巴拉塔 4 PAN10323 3
... ... ... ... ... ...

Evitando assim qualquer dado não esperado!


避免 SQL 注入 💉

SQL 注入可能会导致攻击者执行 SQL 操作并立即执行应用程序中的漏洞。

示例:
考虑执行连续查询的常用功能。

$query = "SELECT * FROM users WHERE username = '$username'";
Enter fullscreen mode Exit fullscreen mode

请考虑各种不同的用户使用方式,以实现公共服务,并admin'; DROP TABLE users; --在接下来的咨询中使用。

SELECT * FROM users WHERE username = 'admin'; DROP TABLE users; --'
Enter fullscreen mode Exit fullscreen mode

请咨询您的恶意和users恶意行为以及应用程序的整体性。

Como proteger minha 应用程序?

Laravel 的Eloquent ORMQuery Builder拥有强大的保护功能,可防止恶意输入和潜在问题的咨询。您可以使用最常见的方法来查询原始数据、恶意使用的数据,以及恶意输入的攻击结果。

例如:
错误❌

$email = $request->email;

DB::select("SELECT * FROM users WHERE email = '" . $email . "'");
Enter fullscreen mode Exit fullscreen mode

您可以通过连接字符串来进行输入,但不能实现参数的清洁。

Certo ✅

$email = $request->email;

User::where('email', $email)->get();
Enter fullscreen mode Exit fullscreen mode

要使用 Laravel 的原生保护,请通过输入函数参数来构建查询。

Certo ✅

$email = $request->email;

DB::select("SELECT * FROM users WHERE email = ?", [$mail]);
Enter fullscreen mode Exit fullscreen mode

如果您确实需要使用原始方法,请通过绑定参数。在 Laravel 中,Laravel 无法输入 SQL 语句并执行查询操作。

别忘了⚠

Semper使用绑定 quando o assunto 来咨询 com SQL bruto 或 Laravel。


使用速率限制🚧

限制量子要求是实现确定速度的必要条件,是保护应用程序的关键点,例如:

  • 蛮力: “adivinhar”的尝试和实现所需的条件是组合可能取得成功。
  • DDoS:尝试在短时间内对服务器进行大量的必要的攻击。

建议考虑以认证形式或使用私人令牌进行轮换相关的额外保护。

如何申请?

没有任何关于速率限制器AppServiceProvider.php的功能boot

RateLimiter::for('default-limiter', function (Request $request) {
            return Limit::perMinute(10);
});
Enter fullscreen mode Exit fullscreen mode

很快,agora com nosso limiter definido iremos aplicar a nossa rota sensível。

Route::middleware('throttle:default-limiter')->group(function () {
    Route::get('/private/{token}', [TokenController::class, 'privateThing']);
});
Enter fullscreen mode Exit fullscreen mode

考虑一下您的情况,以及您的私人物品。我们定义了 10 分钟所需的限制,可以通过强力或秘密的方式获取秘密信息。

例如,IP 的具体限制和个性化定义:

RateLimiter::for('default-limiter', function (Request $request) {
    return Limit::perMinute(10)->by($request->ip());
});
Enter fullscreen mode Exit fullscreen mode

对 IP 的常规基础和不使用日志的限制是重要的,对于各种类型的攻击,包括 DDoS 攻击和各种 IP 的攻击都是重要的。 Lembre-se semper de criar regras de limitação 罗布斯塔!

您可以使用 Laravel 快速验证算法套件,与 Breeze 或 Jetstream 一起使用对羟基苯甲酸酯!轮流登录可设置 com 速率限制。

注意⚠

Preste bastante atenção definir as limitações para não afetar or uso normal dos usuários do seu sistema.轮换主要请求的情况和推荐使用Laravel 11 的每秒速率限制功能。


结论

在发展过程中,我们必须始终致力于解决安全问题,并在未来的重大问题中做出一些决定或消除一些无关紧要的结果。

Muito obrigado por ler até aqui! ❤

文章来源:https://dev.to/tarcisioaraujo/simples-mudancas-grandes-impactos-como-fortalecer-a-seguranca-da-sua-aplicacao-laravel-3ia0