Maison > développement back-end > tutoriel php > Prévenir les conditions de course dans les applications de Laravel

Prévenir les conditions de course dans les applications de Laravel

Susan Sarandon
Libérer: 2025-01-28 16:03:10
original
461 Les gens l'ont consulté

Concurrence Concurrence dans Laravel Applications: prévention et solutions

Les conditions concurrentielles sont des vulnérabilités clés courantes, en particulier dans les applications Web telles que les systèmes simultanés, ce qui peut conduire à un comportement d'application imprévisible. En tant que puissant cadre PHP, Laravel fournit des outils pour gérer efficacement ces situations. Cet article explorera comment les conditions concurrentielles se produisent, leur influence et les solutions de codage pratiques pour les empêcher.

Preventing Race Conditions in Laravel Applications


Quelles sont les conditions concurrentielles?

Lorsque deux processus ou plus tentent de modifier les données de partage en même temps, des conditions de concurrence se produiront, entraînant des résultats imprévisibles. Cela se produit généralement dans les scènes suivantes:

    Fichier Téléchargement
  • Transaction de la base de données
  • Système de vérification d'identité
  • Par exemple, si les deux utilisateurs achètent le dernier produit disponible en même temps, le système peut dépasser l'inventaire en raison de demandes simultanées.

Comprendre les conditions de concurrence à travers des exemples de code


Supposons qu'une application Laravel traite l'achat de billets. Il s'agit d'une méthode de contrôleur simplifiée:

Si les deux utilisateurs essaient d'acheter le même billet en même temps, les deux peuvent passer les conditions IF avant la diminution de l'opération, ce qui conduira à la surveillance.

<code class="language-php">public function purchaseTicket(Request $request)
{
    $ticket = Ticket::find($request->ticket_id);
    if ($ticket->available > 0) {
        $ticket->available -= 1;
        $ticket->save();

        return response()->json(['message' => 'Ticket purchased successfully']);
    }

    return response()->json(['message' => 'Ticket sold out'], 400);
}</code>
Copier après la connexion

Empêcher les conditions concurrentielles dans Laravel


Laravel fournit des outils tels que

transactions de base de données

et

Lock pour gérer efficacement les conditions de concurrence. en utilisant les transactions de base de données

Les transactions de base de données garantissent qu'un groupe d'opérations soit complètement réussi ou complètement échoué. Modifiez le code ci-dessus comme suit:

La partie clé de la protection de la serrure

<code class="language-php">use Illuminate\Support\Facades\DB;

public function purchaseTicket(Request $request)
{
    DB::transaction(function () use ($request) {
        $ticket = Ticket::find($request->ticket_id);
        if ($ticket->available > 0) {
            $ticket->available -= 1;
            $ticket->save();
        } else {
            throw new \Exception('Ticket sold out');
        }
    });

    return response()->json(['message' => 'Ticket purchased successfully']);
}</code>
Copier après la connexion
Laravel prend également en charge les verrous à travers Redis. Ce qui suit est de savoir comment empêcher la modification en même temps:

Comment tester les conditions concurrentielles dans l'application
<code class="language-php">use Illuminate\Support\Facades\Cache;

public function purchaseTicket(Request $request)
{
    $lock = Cache::lock('ticket_' . $request->ticket_id, 5);

    if ($lock->get()) {
        try {
            $ticket = Ticket::find($request->ticket_id);
            if ($ticket->available > 0) {
                $ticket->available -= 1;
                $ticket->save();
            } else {
                return response()->json(['message' => 'Ticket sold out'], 400);
            }
        } finally {
            $lock->release();
        }

        return response()->json(['message' => 'Ticket purchased successfully']);
    }

    return response()->json(['message' => 'Please try again later'], 429);
}</code>
Copier après la connexion

Vous pouvez utiliser

apache jmeter

ou simulation de script personnalisée et demandes simultanées pour tester les conditions concurrentielles.

De plus, vous pouvez essayer d'utiliser nos outils SCANNER SECTIONS DE SITEET GRATUIT

pour identifier les lacunes telles que les conditions concurrentielles dans les applications Web. Ce qui suit est la capture d'écran de l'écran de notre interface d'outils:

La capture d'écran de la page Web d'outil gratuite, vous pouvez y accéder à l'outil d'évaluation de la sécurité.

Après la numérisation, vous recevrez un rapport complet qui met en évidence les lacunes potentielles, y compris les conditions concurrentielles. Ceci est un exemple de rapport sur les lacunes du site Web: Preventing Race Conditions in Laravel Applications L'exemple du rapport d'évaluation d'échappatoire généré par nos outils gratuits fournit des opinions sur les vulnérabilités possibles.

Conclusion

Les conditions concurrentielles constituent un risque grave des applications Web, mais Laravel fournit un mécanisme solide pour réduire ces risques. En réalisant les affaires de base de données, les verrous ou les deux, vous pouvez assurer l'intégrité des données et protéger la sécurité de votre application. Preventing Race Conditions in Laravel Applications

Pour évaluer en détail la vulnérabilité de votre site Web, essayez d'utiliser notre outil d'outil de vérification de sécurité de site Web gratuit. Aujourd'hui, nous ferons le premier pas pour créer un service Web plus sûr!


Veuillez partager vos idées ou vos expériences dans les commentaires ci-dessous pour prévenir les conditions de concurrence à Laravel. Construisons une application sûre ensemble!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal