Skip to content

Securité audit #1045

@SMEWebify

Description

@SMEWebify

Résumé complet de l'audit de sécurité

Ce qui a été corrigé

app/Livewire/QuoteLine.php — 9 méthodes sécurisées

Méthode | Correctif appliqué -- | -- storeQuoteLine() | Vérifie quotes_id === QuoteId editQuoteLine($id) | Vérifie que la ligne appartient au devis courant updateQuoteLine() | Vérifie que quote_lines_id appartient au devis courant enableCalculatedPrice($id) | Vérification ownership disableCalculatedPrice($id) | Vérification ownership upQuoteLine($id) | Vérification ownership downQuoteLine($id) | Vérification ownership duplicateLine($id) | Vérification ownership createProduct($id) | Vérification ownership breakDown($id) | Vérification ownership applyPriceIncreaseToAllLines() | abort_unless(auth()->check()) storeOrder($quoteId) | Vérifie quoteId === QuoteId

Route guest NC + contrôleur

  • routes/web.php : /guest/nonConformitie/{uuid}/{id} — le UUID de livraison est maintenant requis
  • QualityNonConformityController.php : vérifie que la ligne de livraison appartient au UUID fourni
  • guest-delivery-info.blade.php : le lien inclut le UUID

app/Models/Workflow/Orders.php

  • 'id' retiré de $fillable (mass-assign de la PK = toujours faux)
Résumé complet de l'audit de sécurité Ce qui a été corrigé [app/Livewire/QuoteLine.php](vscode-webview://1ee0llmsdfm3lei7d2ssnjlsu31562b20pnlt2nu908vd4s8l3db/app/Livewire/QuoteLine.php) — 9 méthodes sécurisées

Méthode Correctif appliqué
storeQuoteLine() Vérifie quotes_id === QuoteId
editQuoteLine($id) Vérifie que la ligne appartient au devis courant
updateQuoteLine() Vérifie que quote_lines_id appartient au devis courant
enableCalculatedPrice($id) Vérification ownership
disableCalculatedPrice($id) Vérification ownership
upQuoteLine($id) Vérification ownership
downQuoteLine($id) Vérification ownership
duplicateLine($id) Vérification ownership
createProduct($id) Vérification ownership
breakDown($id) Vérification ownership
applyPriceIncreaseToAllLines() abort_unless(auth()->check())
storeOrder($quoteId) Vérifie quoteId === QuoteId
app/Livewire/OrderLine.php — 5 méthodes sécurisées

Méthode Correctif appliqué
edit($id) Vérifie que la ligne appartient à la commande courante
enableCalculatedPrice($id) Vérification ownership
disableCalculatedPrice($id) Vérification ownership
duplicateLine($id) Vérification ownership
applyPriceIncreaseToAllLines() abort_unless(auth()->check())
Route guest NC + contrôleur

routes/web.php : /guest/nonConformitie/{uuid}/{id} — le UUID de livraison est maintenant requis
QualityNonConformityController.php : vérifie que la ligne de livraison appartient au UUID fourni
guest-delivery-info.blade.php : le lien inclut le UUID
app/Models/Workflow/Orders.php

'id' retiré de $fillable (mass-assign de la PK = toujours faux)

Ce qui reste à corriger manuellement (non fait — risque réel mais scope plus large)

  1. Champs de révision dans les FormRequests — CRITIQUE

UpdateQuoteRequest et UpdateOrderRequest autorisent reviewed_by, review_decision, change_approved_at dans le formulaire standard. N'importe quel utilisateur authentifié peut s'auto-approuver un devis/commande via POST.

Correctif requis dans app/Http/Requests/Workflow/UpdateQuoteRequest.php et UpdateOrderRequest.php — créer une route dédiée POST /quotes/{id}/review protégée par rôle, et retirer ces champs de la validation de l'update général.

  1. Autres composants Livewire — CRITIQUE

Les composants QuotesIndex, OrdersIndex, ProductsIndex, InvoicesRequest, DeliverysRequest, CompaniesLines ont les mêmes problèmes de storeXxx sans ownership check. Appliquer le même pattern abort_unless(auth()->check(), 403) sur leurs méthodes store/create.

  1. $fillable — Analyse finale

Les modèles QuoteLines et OrderLines ont selling_price, discount, delivery_status, invoice_status dans $fillable. Le vrai risque n'est pas le $fillable en soi (protégé par Livewire + validation) mais l'absence de vérification de rôle avant de laisser un utilisateur modifier ces champs financiers. À protéger par un rôle can-edit-prices via spatie/laravel-permission (déjà installé).

  1. /pointage et /order/ratings sans auth

Ces routes sont volontairement publiques (terminaux atelier, feedback client). Acceptable en contexte interne à condition que le serveur soit derrière un VPN ou réseau privé. À documenter explicitement.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

Status

No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions