Nie chcę skupiać się na samym inotify, bardziej interesujący wydaje mi się sposób rozpoznawania numeru karty kredytowej. Autor zastosował bardzo popularny sposób detekcji numerów kart, wyrażenie regularne. Niestety generuje on bardzo dużo fałszywych pozytywów. Dobrze, że doczytałem cały post do końca, razem z komentarzem Marcina Wielgoszewskiego. Od razu zaświeciła mi się lampka - "przecież jest algorytm Luhn'a!". Marcin właśnie go polecił, a argumentował to w taki sam sposób jak ja - duża liczba false positive przy zastosowaniu tylko wyrażenia regularnego.
Nie byłbym sobą ;) bez spojrzenia na temat oczami rozwiązań typu WAF. Znam tylko jeden, który potrafi sprawdzać dany ciąg cyfr wg. algorytmu Luhna. Jest nim mod_security. Poniżej znajduje się fragment kodu, implementacja algorytmu (plik apache2/re_operators.c).
Za pomocą operatora verifyCC można w prosty sposób weryfikować poprawność numeru karty kredytowej.
"Czy to oznacza, że mój WAF jest zły? :/" - nie. Nie mam aktualnie wiedzy czy algorytm ten zaimplementowany jest dla innych WAF'ów. Po kilku kliknięciach w Google widzę, że nie jest tak tragicznie. Np. z poziomu iRules można zrobić to na urządzeniach firmy F5.
Czy to już wszystko? Nie. Do obowiązkowej lektury należy Anatomia numerów kart kredytowych. W całość zaskakuje mnie jedno. Już sam wpis na wiki mówi o dodatkowym wariancie w algorytmie Luhn'a. Niestety nie został on uwzględniony w implementacji operatora verifyCC mod_security. Zaznaczony na czerwono fragment kodu wskazuje, że wykonywana jest operacja sum[odd] %= 10;. Implementacja (iRule) dla F5 robi (tylko :() to samo.
PS
Problem fałszywych pozytywów dla CCN dotyczy także wielu innych rozwiązań, które mają utrudnić/uniemożliwić ich kradzież. Powstrzymam się i nie zaprezentuję jak można je omijać. Berek ;-)

0 komentarze:
Prześlij komentarz