Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sprawdzanie poprawności wpisanego kodu - Captcha
Majkelo23
post
Post #1





Grupa: Zarejestrowani
Postów: 226
Pomógł: 17
Dołączył: 13.02.2012

Ostrzeżenie: (0%)
-----


Jak mogę sprawdzić czy kod podany przez usera, jest zgodny z tym co ma w obrazku. Mam plik captcha.php i wyświetla on grafikę captchową. Ale jak próbuję dorzucić tam formularz, który by sprawdzał poprawność to nie da rady, ponieważ zdefiniowane mam tam:

  1. header('Content-Type: image/jpeg');


Co odbiera mi możliwość wprowadzenia tam formularza.
Próbowałem z sesją. Dodałem na końcu captcha.php coś takiego:

  1. $_SESSION['captcha'] = $tabb;



A potem w pliku test.php:

  1. <?php
  2. require_once('captcha.php');
  3. echo $_SESSION['captcha'];
  4. ?>


Ale to nic nie daje...Jeśli w pliku captcha.php mam:

  1. imagejpeg($background);


To wyświetla mi w test.php TYLKO grafikę (captchę), bez tego echa. Z kolei jeśli tej linijki nie mam to wyrzuca mi błąd:
Kod
Obrazek „http://test.pl/test.php” nie może zostać wyświetlony, ponieważ zawiera błędy.


Jak to mogę sprawdzić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
absflg
post
Post #2





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 14.11.2011

Ostrzeżenie: (0%)
-----


Ten sposób jest ekstremalnie zawodny... Wystarczy, że ktoś otworzy dwie karty przeglądarki i zostanie odrzucony dobry kod (bo wygenerowano w międzyczasie nowy).

Moje 2 propozycje:
Albo użyć gotowego rozwiązania (np. reCaptcha, czy jakoś tak), albo...

W danych sesji stworzyć tablicę. Za każdym razem gdy tworzysz formularz z obrazkiem do przepisania robisz następujące rzeczy: generujesz ciąg do przepisania, tworzysz mu unikatową sygnaturę (np. dodaj na końcu czas i potraktuj go funkcją hashującą), dopisujesz do tablicy w sesji ( $_SESSION['tablica'][$sygnatura] = $tekst_do_przepisania; ). Dodajesz do formularza ukryte pole z sygnaturą. Dodajesz obrazek podając sygnaturę jako parametr (skrypt generuje obrazek w oparciu o tekst zapisany w sesji). Bezwzględnie po każdej próbie (udanej czy nie) kasujesz kod z tablicy w sesji.

Nie jest to doskonałe, ale mniej podatne niż poprzednie proponowane.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 13:16