Jak się łamie kody CAPTCHA

Spotkałam się niedawno na serwisie hack.pl z opisem sposobu łamania kodów CAPTCHA. Okazuje się, że za tym wszystkim stoją, a raczej siedzą przy kompach ludziki i wygląda to tak:

1. Oprogramowanie typu bot odwiedza stronę rejestracji i wypełnia formularz rejestracji losowymi danymi.
2. W momencie wyświetlania zabezpieczenia typu CAPTCHA oprogramowanie typu bot wysyła wiadomość do terminalu komputerowego w Indiach.
3. Pracownicy wpisują odpowiednią kombinację liter i cyfr, a następnie wysyłają informację zwrotną do programu.
4. Program wypełnia pole odpowiedzi i kończy proces rejestracji.
5. W ten sposób spamerzy uzyskują swobodny dostęp do kont użytkowników.
6. Z konta wysyłana jest niepożądana poczta elektroniczna do tysięcy legalnych kont poczty elektronicznej.

Cały artykuł znajduje się tutaj.

Prima Aprilis 2008

I tak ofiarą Prima Aprilis w tym roku padła moja ulubiona zabawka w Linuxie – Compiz. Oto cytat ze strony http://magicgarden.sourceforge.net w której właściciel sugeruje iż efekt obracającej się kostki to tylko odpowiednio spreparowany filmik;)

„Facts:
Everyone knows that there are no 3D games for Linux. Everyone knows that Linux has serious troubles with video drivers. So how is it possible that something so cool was created for Linux? Think!
Best Windows gurus spend 11h (eleven hours) trying to configure Compiz Fusion. And the result? Completely nothing. Compiz Fusion doesn’t work because it can’t work.
Each video of rotating cube on youtube is in fact the same movie processed with different video filters.
Closer analysis showed that the thing called „Compiz Fusion” is in fact just a movie rendered on four Windows Vista machines in seven hours. This movie is now available as a package for most popular Linux distributions.
Each person who claim, that he uses a Compiz Fusion is a lier. All he can do on his Linux is to play a prerendered movie.

Czego to ludzie nie wymyślą:)

Przydatny selektor

Mowa tutaj o uniwersalnym selektorze jakim jest gwiazdka. Przykład użycia:

*
{
    margin: 0px;
}

Powoduje on, że wszystkie elementy występujące w dokumencie będą miały zerowe marginesy. Używam go, gdy chcę zapanować nad wszystkimi elementami i nie mieć nieoczekiwanych różnic w odstępach między przeglądarkami.

Przykładowo elementy takie jak paragraf czy formularz same dodają sobie odstępy. Selektor może również zawierać ustawienia dotyczące czcionki, ramek itp. Oczywiście kolejnymi stylami można nadawać dowolne odstępy na dowolnych elementach i tym samym nadpisać ustawienia dokonane tym selektorem.

Nazwa tabeli jako parametr w procedurze składowanej

Załóżmy, że potrzebujemy procedurę składowaną, która w zależności od zadanego parametru wyciągnie dane z tabeli podanej jako argument do procedury składowanej.
Na pierwszy rzut oka wyglądałoby, że wystarczy utworzyć procedurę postaci::

CREATE PROCEDURE getDataFromTable
@TName nvarchar(100)
AS
BEGIN
    SELECT * FROM @TName
END

@TName to argument wejściowy będący nazwą tabeli.
Jednak ta procedura spowoduje błąd postaci: Must declare the table variable „@TName”
Rozwiązanie tego problemu leży właśnie w dynamicznym SQL:)
Zatem powyższa procedura powinna mieć postać:

CREATE PROCEDURE getDataFromTable
 
@TName nvarchar(100)
AS
BEGIN
    DECLARE @query nvarchar(1000)
    SELECT @query = 'SELECT * FROM '
    SELECT @query = @query + @TName
    EXEC(@query)
END

Nazwa tabeli nadal pozostaje argumentem wejściowym. Dodatkowo w kodzie SQL-a tworzymy zmienną @query, w której umieszczamy potrzebne nam zapytanie.

Działa tylko pod Operą

Jak uzyskać kod postaci:

<div id="title">Tytuł jakiś</div>

za pomocą CSS? Jest na to ciekawy sposób, który działa niestety tylko pod Operą – mam wersję 9.23. Pod IE6 i FF 2.0.0.8 niestety nie:( Ale wracając do sposobu, to można to zrobić następująco:

<div id="title"></div>

Jak widać, pozbyłam się tekstu, który znajdował się w divie.
Zamiast tego włożę go do… stylu:)

#title
{
    content:Tytuł jakiś
}

We wspomnianej już Operze wyświetlone zostanie na ekranie po prostu Tytuł jakiś. Jednym słowem div o id #title zostanie wypełniony tekstem podanym we właściwości content:)