Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[PHP] Jak najprostsza captcha OR math captcha $_POST czy parsowanie?

Ostatnio zmodyfikowano 2012-07-08 21:12
Autor Wiadomość
DejaVu
» 2012-07-07 19:28:18
1. Losujesz kod, zapisujesz go w bazie
2. Zwracasz ID kodu
3. Generujesz PHP obrazek zawierający kod (kod generujesz w katalogu tmp).
4. Przy submicie wysyłasz ID kodu + kod wpisany przez użytkownika
5. Potem tylko robisz Update'a na bazie, że kod został właśnie użyty (aby nie dało się ponownego submita zrobić z innym numerkiem) no i zwracasz tym samym informację czy podany kod jest poprawny (i wprowadzony pierwszy raz) czy też nie.
P-59678
ison
» 2012-07-07 20:52:45
jest dosyć prosty sposób na captchę

Po prostu utwórz sobie plik getCaptcha.php który wylosuje numerek, zapisze go w sesji użytkownika i zwróci obrazek z tym numerkiem.
Za każdym razem kiedy użytkownik wywoła skrypt getCaptcha to dostanie nowy indywidualny numer, który musi przepisać.
Przy submicie sprawdzsz czy przepisany kod zgadza się z kodem w jego sesji po czym oczywiście go czyścisz.
P-59690
akwes
Temat założony przez niniejszego użytkownika
» 2012-07-08 08:55:49
@DejaVu, czyli teoretycznie każde wyświetlenie wpisu/strony z captchą tworzyłoby wpis w bazie?

@ison, pliki sesji są trzymane na serwerze, czyli jak właduje tam kod z captchy to użytkownik go nie podglądnie?
P-59697
Drraven
» 2012-07-08 09:52:54
Chyba chodziło p. Piotrkowi, że jak kod dobry to komentarz w bazie się dodaje ;D

#m4tx: a widziałeś kiedyś takie coś? Na początku było już mówione, że skrypt pod daną stronę i tak to obejdzie :D
P-59699
m4tx
» 2012-07-08 10:40:14
No to niech reCaptchę obejdzie :P A poza tym spamowe wiadomości, których jest pewien, i tak wywali z automatu.
P-59701
DejaVu
» 2012-07-08 13:41:58
@akwes: true (każde wyświetlenie captchy), ale tylko kod, więc to był wpis rzędu 16bajtów więc baza by to przeżyła :) Poza tym zamiast oznaczać 'kod użyty' można go po prostu usuwać.
P-59704
ison
» 2012-07-08 14:43:58
@ison, pliki sesji są trzymane na serwerze, czyli jak właduje tam kod z captchy to użytkownik go nie podglądnie?
nie, użytkownik nie może podejrzeć co jest zapisane w sesji
P-59713
akwes
Temat założony przez niniejszego użytkownika
» 2012-07-08 15:37:23

<?php
// getcaptcha.php
$val1 = rand(1,9);
$val2 = rand(1,9);
$val3 = rand(1,9);

// number result
$result = $val1 * $val2 + $val3;
session_start();
$_SESSION['cap'] = $result;
// text result to draw
$text = $val1." * ".$val2." + ".$val3." = ";

// making image
    $image = imagecreate(120,30);
    $bg_color = ImageColorAllocate($image, 110,0,0);
    $text_color = imagecolorallocate($image, 124, 163, 255);


$font = "/usr/share/fonts/truetype/msttcorefonts/arial.ttf";
// drawing char by char
for($x=0; $x <= strlen($text); $x++)
{
imagettftext($image, rand(12,14), rand(-15,15), 5+10*$x, 20, $text_color, $font, $text[$x]);
    }
    header("content-type: image/png");
    imagepng($image);
    imagedestroy($image);
?>


<form action="SOME_URL" method="post">
<img src="getcaptcha.php"/><input type="text" name="cap"  cols="100" rows="1" >
<input type="submit" name="send" value="Publikuj" />
</form>


session_start();
if ( isset($_SESSION['cap']) &&  ($_SESSION['cap'] == $_POST['cap']))
{
  // action
  unset($_SESSION['cap']);
}
else
{
 // wrong
}

Jakby ktoś kiedyś szukał ;> Nie gwarantuje braku błędów ;>

// pierwsze poprawki ;)
P-59715
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona