strona glownaartykulydownloadszukajreklamakontaktavataryregulamin

Witaj na szabloniki.com!
Na naszej stronie znajdziesz: dodatki na bloga, darmowe szablony stron, szablony na bloga, PHP-Fusion Themes (szablony do PHP-Fusion), generator bannerów, wskaznik PageRank strony, skrypty, avatary, tutoriale do Photoshopa, tla pod bannery, tanie szablony za SMS.

Najnowsze artykuły:
Grafika i zdjęcia do projektów
Okrągły button
Usuwamy zmarszczki
Skróty klawiszowe
Miniaturkowy świat
Zdjęcia

Webmaster i grafik
dodatki, skrypty, generatory

avatarytutoriale do photoshopa

Szablony za SMS

+ Wszystkie (89)
+ 1 kolumna (33)
+ 2 kolumny (35)
+ Czarne (8)
+ Czerwone (16)
+ Niebieskie (16)
+ Opisy gg (5)

+ PHP-Fusion 6 (9)
+ PHP-Fusion 7 (4)
+ Pomara&#324czowe (4)
+ Portale (58)
+ Radio internetowe (4)
+ Zielone (10)
Polecamy
Tutaj kupisz odzież męską w dużych rozmiarach
Generator graficznych tokenów
Dobrym sposobem zabezpieczenia np. swojego forum przed zaśmieceniem tysiącami nie chcianych postów są graficzne tokeny, których treść zmienia się za każdym razem. Przepisanie jego tresci wymaga odrobiny myślenia więc pozostawia bez szans wszelkiego rodzaju roboty ,które bezmyślne probują wypełniać formularze. Ten sposób autoryzacji wykożystać można również przy zakładaniu nowego konta, logowania do szkynki pocztowej, zablokowania możliwości pobrania jakiegoś pliku przez Download Manager-y typu FlashGet oraz wszędzie tam gdzie chcemy uchronić się przed automatycznym i nie kontrolowanym przesyłaniem informacji. Poniżej przedstawiam swój sposób realizacji takiego systemu opartego na ogolnie dostępnym dziś PHP.



Jak zwykle najpierw:

-praktyka :P
-kod źrodłowy (zip)

A potem teoria :)

Opisze ogólną zasadę działania skryptu a dodatkowe informacje w komentarzach. Jesli coś z poniżeszego kodu wyda Ci się nie jasne odwiedź http://php.net. Tam znajduje się szczegółowy opis każdej z użytych instrukcji.



Cały 'System' składa się z dwóch plików:

index.php - Formularz z wymaganymi polami.
get_token.php - Skrypt generujący odpowiednią grafikę.

Otwarcie pliku index.php,w którym umieścimy wszelkie wymagane formularze,powoduje wygenerowanie kodu potwierdzenia który uzytkownik musi wprowadzić w przeznaczone do tego pole. Kod ten ,w postaci zaszyfrowanej przesyłany jest do get_token.php który dynamicznie utworzy grafikę z oczekiwanym napisem. Jak już wczesniej zaznaczyłem aby całe rozwiązanie mialo sens musimy uniknąc przekazywania treści tokenu otwartym tekstem w kodzie HTML. Zastosujemy więc proste szyfrowanie.
- Ustalamy klucz wg. którego będziemy przeprowadzać kodowanie. Jego poufność będzie gwarantować ograniczone możliwości poznawcze potencjalnego włamywacza :P
- Dla każdej pary: litera kodu-litera klucza przeprowadzona zostanie operacja XOR
- Otrzymany ciąg zostanie zakodowany wg. standardu base64
- Na koniec każdy znak 'przesuniemy' o 13 pozycji w prawo
- W przypadku gdy klucz będzie krótszy niż tekst do zakodowania 'przewijamy' go do początku.
Zaproponowana metoda nie jest może szgólnie wyszukana i nie zapewnia wojskowego poziomu zabezpieczen ale jak dla tutejszych zastosowań będzie w sam raz i napewno zniechęci większość natrętnych.

Aby odszyfrować takie informacje należy postąpić dokładnie na odwrót poczynjąc od końca. Oczywiście operacja powiedzie się jesli XOR przeprowadzimy z użyciem tego samego klucza :)

Żeby uniknąć konieczności wieloktrotnego umieszczania w kodzie HTML zaszyfrowanych danych ,a co za tym idzie kilkukrotnego ich dekodowania. Wartośc wygenerowanego tokenu przechowywać będziemy w zmiennej sesyjnej. Przy pierwszym wywołaniu strony jej wartość zostanie ustalona, a przy kolejnym sprawdzana z wartością przekazaną metodą POST z formularza. Hm... i chyba tyle. Do rzeczy :P



Plik index.php


<?php

/* Odpala nowa sesje */
session_start();

/* Sprawdzamy czy mamy juz zarejestrony kod */
if (empty($kod_sesji)){
/*
Jesli nie znaczy ze strone otwieramy pierwszy raz,
towrzymy wiec zmienna w ktorej zapiszemy wartosc tokena
*/
session_register("kod_sesji");
}else{
/*
Jesli zmienna istnieje, wcisnieto ok - sprawdzmy zgodnosc
wprowadzonego kodu z zapamietanym.
*/
if($kod_sesji==$_POST['kod_txt']){
/* Kody zgadzaja sie */
echo "<span style=\"color:green\">Wpisano poprawny kod</span>";
} else{
/* Brak zgodnosci */
echo "<span style=\"color:red\">Wpisany kod nie jest poprawny</span>";
}

$kod_sesji=NULL;
}
/* Ustalamy ilosc znakow w generowanym tokenie */
define ('DLUGOSC_KODU',5);

/*
Klucz uzyty do zaszyfrowania tresci tokena - TAKI SAM musi
znalesc sie w pliku get_token.php, inaczej nie zostanie
poprawnie odkodowany.

*/
define ('KLUCZ','dupa');

/* Lancuch pomocniczy. Tych znakow bedziemy uzywac do losowania kodu */
define ('MATRIX','1234567890abcdefghijklmnopqrstuwxyz');

/*
Losujemy ustalona liczbe znakow u szyfrujemy
wg. schematu opisanego wczesniej
*/
for ($e=0;$e<DLUGOSC_KODU;$e++){
$litera_klucza=substr(KLUCZ,$e%strlen(KLUCZ),1);
$litera_kodu=substr(MATRIX,rand(0,strlen(MATRIX)-1),1);
$kod_sesji.=$litera_kodu;
$litera_kodu=$litera_kodu ^ $litera_klucza;
$kod.=$litera_kodu;
}
/* Dopelnia zerami, dla zmylenia przeciwnika ;) */
$token=str_pad($kod,10);
$token=base64_encode($token);
$token=str_rot13($token);
/*
Po tych operacjach otrzymamy zakodowany ciag wylosowanych znakow
ktory stanie sie parametrem dla get_token.php
*/

echo "<html>
<body><br>";

echo "<img src=\"get_token.php?token=$token\"";


echo "<br>
<form method=\"post\" action=\"c2.php\">
<input type=\"text\" name=\"kod_txt\" size=\"8\" maxlength=\"".DLUGOSC_KODU."\">
<input type=\"submit\" value=\"ok\">
</form>
";

echo "</body>
</html>";

?>



Plik get_token.php


<?php

/*
Klucz uzyty do dekodowania tresci tokena - Dla poprawnego dzialania
MUSI byc taki sam jak uzyty do szyfrowania
*/
define('KLUCZ','dupa');

/* Informujemy przegladaczke ze ten plik to grafika */
Header("Content-type: image/jpeg");

/* Napis rysowac bedziemy na przygotowanym wczesniej tle */
$grafika=imagecreatefromjpeg('./tlo.jpg');

/*
Pobieramy wartosc przekazanego w URL tokenu i odszyfrowujemy
postepujac odwrotnie niz podczas kodowania
*/
$token=str_rot13($_GET['token']);
$token=base64_decode($token);
$szyfr=substr($token,0,strpos($token," "));

for ($x=0;$x<strlen($szyfr);$x++){
$litera_klucza=substr(KLUCZ,$x%strlen(KLUCZ),1);
$litera_szyfru=substr($szyfr,$x,1);
$kod=$kod.($litera_klucza^$litera_szyfru);
}
/*
Zmienna $kod zawiera teraz rozkodowana tresc tokenu, mozna ja
wyswietlic korzystajac z graficznych funkcji PHP
*/


$tlo=imagecolorallocate($grafika,0,0,0);

/* Kolor tekstu */
$tekst=imagecolorallocate($grafika,0,0,0);

/* Kolor kółeczek */
$kolo=imagecolorallocate($grafika,200,150,100);

/* Ponizsza operacje powtarzamy 15 razy */
for ($x=1;$x<=15;$x++){
/* Rysujemy kolko o ustalonym kolorze. Wspolrzedne jego srodka,
wysokosc oraz szerokosc losujemy. */
imageellipse($grafika,rand(0,75),rand(0,25),rand(10,35),rand(10,12),$kolo);
}


/* Wyswietlamy napis */
imagestring($grafika,5,5,5,$kod,$tekst);

/* Zwracamy wygenerowana grafike */
Imagegif($grafika);
?>


Powodzenia ! :)

Dodane przez polak dnia March 06 2007 11:32:03 15542 Czytań · Drukuj