Download the PHP package adt/log-sanitizer without Composer

On this page you can find all versions of the php package adt/log-sanitizer. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package log-sanitizer

ADT Log Sanitizer

Odstraní citlivá data z payloadu, než se uloží do logu.

Proč

Request/response logy, auditní záznamy a transakční logy ukládají obsah, který složil někdo jiný — takže dopředu nevíš, co v něm bude. Do logu se tak běžně dostane token, heslo z formuláře nebo číslo karty a leží tam po celou dobu retence, čitelné pro každého, kdo má na tabulku přístup.

Balíček je bez závislostí (jen ext-mbstring), aby ho mohla použít knihovna, presenter i konzolový příkaz bez ohledu na framework.

Použití

Klíče zůstávají, mění se jen hodnoty — v logu má být vidět, že pole přišlo, jen ne s čím.

Maskování podle názvu klíče

Název se rozpadne na slova (camelCase i snake_case) a pak:

To druhé je důvod, proč tu není čistě podřetězcová shoda: str_contains('shipping', 'pin') je true, takže naivní implementace zamaskuje doručovací adresu a v logu zůstane díra, o které nikdo neví. Totéž company vs. pan.

Vlastní klíče:

Hodnoty bez stabilního názvu klíče

Když hodnota vzniká za běhu a může se objevit kdekoli — typicky vydaný token — zaregistruj ji a zmizí i z nesouvisejících polí a z textu:

Hodnoty krátší než 8 znaků se ignorují, jinak by zamaskovaly půl logu.

Čísla karet

Zapnuté ve výchozím stavu. Hledá v hodnotách 13–19 ciferná čísla (i s mezerami a pomlčkami), ověří Luhnovou kontrolou a nechá poslední čtyři číslice:

Luhn je tam proto, aby se nemaskovalo každé delší číslo — objednávky, EAN ani IČ neprojdou.

Samotný Luhn ale nestačí: projde jím náhodou každé desáté číslo. Časová značka 20250909095540 má 14 cifer, spadá do rozsahu PAN, a bez další kontroly by se v 10 % případů zamaskovala — měřeno na 20 000 reálných značkách. Sanitizer proto vylučuje řetězce, které vypadají jako YYYYMMDDHHMMSS nebo jako unixový čas v milisekundách. Žádné karetní schéma nezačíná 19xx ani 20xx, takže tím o skutečné karty nepřijdeš.

Už maskovaný PAN z terminálu (************1111) zůstává, jak přišel.

U dat, kde by maskování vadilo, se dá vypnout: withoutCardNumberMasking().

Karetní klíče

Klíče pan a card_number (včetně MaskedPAN, cardNumber…) se nenahrazují paušálně, ale jejich hodnota projde zkrácením:

Zkrácení je metoda, kterou PCI DSS připouští, a poslední čtyřčíslí je potřeba k párování a reklamacím — paušální *** by je zničilo bez jakéhokoli zisku. Když číslo pod takovým klíčem neprojde Luhnem, zamaskuje se celé; při vypnutém maskování karet neprojde vůbec.

SAD (cvv, pin, track…) se naopak maskuje vždy celý — ten se ukládat nesmí ani zkrácený.

Rozpoznání schématu a upozornění

PAN má strukturu podle ISO/IEC 7812 a schémata mají charakteristické prefixy a délky (Visa 4…, MasterCard 51–55 a 2221–2720, Amex 34/37…). Prefix zúží falešné shody 8,2× — z 10 % na 1,2 % měřeno na časových značkách a náhodných ID.

Maskuje se přesto široce, jen podle délky a Luhna. Seznam prefixů stárne: dvojková řada MasterCard přišla až v roce 2017 a regexy, které ji neměly, tiše propouštěly platné karty. U sanitizeru je falešně negativní shoda dražší než falešně pozitivní.

Prefix se proto používá k něčemu jinému — k upozornění s vysokou jistotou:

Listener dostane název schématu, délku a cestu ke klíči (products[12].ean, u holého řetězce prázdnou), nikdy hodnotu — jinak by varování bylo dalším místem, kde PAN uniká. Bez cesty se nález v zamaskovaném logu hledá naslepo. Názvy klíčů posílá klient, takže se v cestě nahradí každý kandidát na PAN i registrovaná tajemství. Listener se dvěma parametry funguje dál. Smysl je nemaskovat potichu: PAN v logu znamená rozbitou integraci výš a někdo se to musí dozvědět, jinak zůstane databáze čistá a zdroj posílá PAN dál i jinam.

U dat, která skládáte sami (odpověď vlastního API, request posílaný jinam), upozornění nedává smysl — PAN by v nich mohl být jen tak, že dřív přišel některým vstupem, a ten už se kontroloval. Pro ně je withoutCardNumberAlert(): kopie, která dál maskuje, jen neupozorňuje. Tajemství z hideValue() přebírá jen ta registrovaná do chvíle vytvoření kopie, takže ji vytvářejte až těsně před použitím.

Rozpoznání jde použít i samostatně:

Prázdné hodnoty

Prázdná hodnota (null, '', []) se nemaskuje ani pod citlivým klíčem — skrýt není co a v logu je rozdíl mezi „pole bylo prázdné" a „pole mělo hodnotu" diagnosticky užitečný.

Co ještě dělá s řetězci

Testy


All versions of log-sanitizer with dependencies

PHP Build Version
Package Version
Requires php Version >=8.4
ext-mbstring Version *
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package adt/log-sanitizer contains the following files

Loading the files please wait ...