php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.04.2008, 16:46  
Neuer Benutzer
 
Registriert seit: 01.04.2008
Beiträge: 4
bl4de befindet sich auf einem aufstrebenden Ast
Standard Text-Captcha

Hi,

das hier ist mein erster Post und ich bin noch relativ unerfahren.
Jetzt fragt ihr euch warum ich in der profi section posste, das ist weil
ich probleme mit einem php code habe der schon wesentlich mehr als
anfänger wissen braucht.

also es geht um text-captcha, das sind die sicherheits codes, die vor spambots schützen, ich hab da eine gute variante in reinem php gefunden und will sie verwenden,

Jetzt habe ich ein formular indem der benutzer alles eintippt und abschickt dann wird überprüft ob felder leer sind, die passwörter nicht übereinstimmer, oder eben der captcha code falsch ist :

PHP-Code:
$username $_POST["username"];
$password $_POST["password"];
$password2 $_POST["password2"];
$code $_POST["code"];
if(
$password != $password2 OR $code != $n->getNum() OR 
$username == "" OR $password == "" OR $code == ""
geht alles bist auf "$code != $n->getNum()"
ohne das geht alles perfekt, nur wenn ich das einfüge nimmt er es nicht,
ich denke das "$n->getNum()" nicht die captcha zahl ist, oder so, und somit immer FALSE bei der if abfrage rauskommt.

Ich habe keinen plan wie ich diese abfrage sicher rein bekommt, wäre nett wenn einer helfen kann.

der ganze code des captcha scripts steht unten.

mfg der blade



PHP-Code:
<?php
# Von Rene Schmidt (rene@reneschmidt.de) fuer DrWeb.de

// Diese Klasse erzeugt EINE Ziffer
class Digit {

  
// Die Zweierpotenzen sind hier schon berechnet notiert, damit sie nicht jedes Mal neu
  // ausgerechnet werden muessen. Wir benoetigen fuer eine 5x3-Matrix, deren Zellen mit
  // Zweierpotenzen maskiert sein sollen 15 Bits, also die Bitmasken 2^0 bis 2^14
  
var $bits = array(1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384);

  
// Dieses Array enthaelt die Zeilen einer Ziffer, deren Zellen wiederum als Array dargestellt werden
  // Siehe Konstruktor
  
var $matrix  = array();

  
// Dies sind die fertig berechneten Bitmasken der Ziffern 0 bis 9 in Dezimaldarstellung
  
var $bitmasks = array(31599187402960731143189213118331695188553172731215);

  
// Konstruktor; nimmt die darzustellende Ziffern entgegen; Matrix wird initialisiert
  // setMatrix() wird mit der korrekten Bitmaske der darzustellenden Ziffer aufgeruefen
  
function digit$dig ) {
    
$this->matrix[] = array(000); // 2^0, 2^1, 2^2 ... usw.
    
$this->matrix[] = array(000);
    
$this->matrix[] = array(000);
    
$this->matrix[] = array(000);
    
$this->matrix[] = array(000); // ..., ..., 2^14

    
((int)$dig >= && (int)$dig <= 9) && $this->setMatrix$this->bitmasks[(int)$dig] );
  }

  
// Methode erzeugt anhand der Bitmaske die Matrix der Ziffer
  // Vom Konstruktor erhaelt die Methode die Bitmaske der darzustellenden Ziffer
  
function setMatrix$bitmask ) {
    
$bitsset = array();

    
// Jetzt wird jedes Bit daraufhin geprueft, ob es zur Bitmaske gehoert
    // Wenn ja, wird es im Array $bitset gespeichert
    
for ($i=0$i<count($this->bits); ++$i)
      ((
$bitmask $this->bits[$i]) != 0) && $bitsset[] = $this->bits[$i];

    
// Nun wird die initialisierte und leere Matrix hergenommen und Zeile fuer Zeile und Zelle fuer Zelle
    // bestueckt. Zellen, die leer sein sollen, bleiben auf 0, aktivierte Zellen erhalten den Wert 1
    // Beispiel aus dem Konstruktor - die Ziffer 1 wuerde als Matrix so aussehen:
    //     $this->matrix[] = array(0, 0, 1); // 2^0, 2^1, 2^2 ... usw.
    //     $this->matrix[] = array(0, 1, 1);
    //     $this->matrix[] = array(0, 0, 1);
    //     $this->matrix[] = array(0, 0, 1);
    //     $this->matrix[] = array(0, 0, 1); // ..., ..., 2^14
    
foreach($this->matrix AS $row=>$col)
      foreach(
$col AS $cellnr => $bit)
        
in_arraypow(2,($row*3+$cellnr)), $bitsset) && $this->matrix[$row][$cellnr] = 1;
  }
}

// Diese Klasse kuemmert sich um die korrekte Darstellung mehrerer Ziffern (also einer Zahl)
class Number {

  var 
$num 0// Zahl, die dargestellt werden soll
  
var $digits = array(); // Enthaelt spaeter fuer jede Stelle ein Digit-Objekt

  // Konstruktor; nimmt direkt die darzustellende Zahl entgegen.
  
function number$num ) {
    
$this->num = (int)$num// Zur Sicherheit in ganze Zahl umwandeln

    
$r "{$this->num}"// In Zeichenkette konvertieren

    // Jetzt fuer jede Stelle der Zahl ein Digit-Objekt erzeugen
    
for( $i=0$i<strlen($r); $i++ )
      
$this->digits[] = new Digit((int)$r[$i]);
  }

  
// Liefert einfach die Zahl, die dargestellt wird.
  
function getNum() { return $this->num; }

  
// Gibt die Zeilen aller Ziffern nacheinander aus; also erst alle ersten, dann alle zweiten Zeilen usw.
  
function printNumber() {
    for(
$row=0$row<count($this->digits[0]->matrix); $row++) {
      foreach( 
$this->digits AS $digit ) {
        foreach(
$digit->matrix[$row] AS $cell)
          if(
$cell === 1// 1 bedeutet, die Zelle soll aktiv sein (=schwarz)
            
print("<span class=\"s\">&nbsp;&nbsp;</span>");
          else
            print(
"<span class=\"w\">&nbsp;&nbsp;</span>");
        print(
"<span class=\"w\">&nbsp;</span>"); // Leerraum zwischen den Ziffern
      
}
      print(
"<br>"); // Naechste Zeile
    
}
  }
}

?>

<html>
<head>
<style>
    .s { color: black; background-color: black; }
    .w { color: white; background-color: green; }
</style>
</head>
<body>
<h2>Beispiel</h2>
<div >
<?php
$n 
= new Numberrand(1000,9999) );
$n->printNumber();
printf"<h2>Dargestellt wird die Zahl %d</h2>"$n->getNum() );
?>
</div>

</body>
</html>
bl4de ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 01.04.2008, 17:59  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Hallo bl4de,
die Code-Beispiele die du gepostet hast lassen nirgendwo auf ein Captcha-Script schließen....
Du hast ja selbst schon gemerkt, dass der vom Benutzer übergebene Code ($_POST['code']) nicht gleich dem aus $n->getNumber() ist. Wahrscheinlich weil du dafür jedesmal eine neue Zufallszahl generierst...aber wie gesagt: Das ist aus deinem Code so nicht ersichtlich.
__________________
Today you...Tomorrow me.
agrajag ist offline   Mit Zitat antworten
Alt 01.04.2008, 18:14  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Was Captchas angeht, habe ich auf meiner Seite mal einen kleinen Artikel geschrieben: Barrierefreie_CAPTCHAs
Die Methode ist meines Erachtens die einfachste Methode, Bots abzuhalten. Dazu bekommt der User davon nichts mit.

Geändert von Manko10 (01.04.2008 um 18:17 Uhr).
Manko10 ist offline   Mit Zitat antworten
Alt 01.04.2008, 19:02  
Neuer Benutzer
 
Registriert seit: 01.04.2008
Beiträge: 4
bl4de befindet sich auf einem aufstrebenden Ast
Standard

@agrajag
das ganze ist ein captcha script, weil es funktioniert !!, nur das überpfüfen der zahl geht nicht, generiert wird diese aber einwandfrei, und so das man sie nicht auslesen kann, zumindest nicht so easy

und hiermit füge ich das ganze ein:
klappt auch bei nem test:
PHP-Code:
<?php
$n 
= new Numberrand(1000,9999) );
$n->printNumber();
printf"<h2>Dargestellt wird die Zahl %d</h2>"$n->getNum() );
?>
"$n = new Number( rand(1000,9999) );
$n->printNumber();"
das generiert die zufalls zahl mit pro ziffer 3x5 felder, funktioniert auch!

"
printf( "<h2>Dargestellt wird die Zahl %d</h2>", $n->getNum() );"
damit zeigt er die zahl im klartext an, und die zahl im klartext brauche
ich zum überpfrüfen, was wie gesagt nicht geht.




@manko10 ja ist ned mal eine so dumme idee, aber passt mir sowas ned,
nicht böse gemeint, klappt bestimmt und ist ein netter trick ,
aber es soll einfach ne simple captcha abfrage sein, und fertig

sollte es wirklich einfach nur spimple sein und nur funktionell, dann
nehm ich ein paar zeilen java script und für irgend was fertiges sein.

Geändert von bl4de (01.04.2008 um 19:07 Uhr).
bl4de ist offline   Mit Zitat antworten
Alt 01.04.2008, 20:52  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Ja klar, kein Problem. Jedem das seine.
Aber ehrlich gesagt ist die von mir vorgeschlagene Methode noch einfacher. Es muss weder etwas zufälliges generiert noch irgendetwas gespeichert werden. Lediglich ein Feld, dass für den normalen User noch nicht mal sichtbar ist.
Ich will dich jetzt nicht gegen deinen Willen überzeugen, aber dennoch versuche ich immer wieder diese Methode einzubringen, damit die Ära der normalen Captchas vielleicht irgendwann mal ein Ende hat.
Manko10 ist offline   Mit Zitat antworten
Alt 01.04.2008, 20:54  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Zitat:
Zitat von bl4de Beitrag anzeigen
@agrajag
das ganze ist ein captcha script, weil es funktioniert !!
Hä? Ich dachte du bist hier weil es nicht funktioniert
Ich sage ja auch nciht, dass das ganze nicht irgendwie zu einem captcha-script gehören kann.....
Zitat:
und hiermit füge ich das ganze ein:
klappt auch bei nem test:
PHP-Code:
<?php
$n 
= new Numberrand(1000,9999) );
$n->printNumber();
printf"<h2>Dargestellt wird die Zahl %d</h2>"$n->getNum() );
?>
"$n = new Number( rand(1000,9999) );
$n->printNumber();"
das generiert die zufalls zahl mit pro ziffer 3x5 felder, funktioniert auch!

"
printf( "<h2>Dargestellt wird die Zahl %d</h2>", $n->getNum() );"
damit zeigt er die zahl im klartext an, und die zahl im klartext brauche
ich zum überpfrüfen, was wie gesagt nicht geht.
Du hast immernoch nicht den relevanten Code gepostet.

Irgendwo musst du ja schließlich die generierte Zahl _speichern_ um sie dann nachdem der User das Formular abgeschickt hat mit der Eingabe des Users zu vergleichen....
__________________
Today you...Tomorrow me.
agrajag ist offline   Mit Zitat antworten
Alt 01.04.2008, 21:19  
Neuer Benutzer
 
Registriert seit: 01.04.2008
Beiträge: 4
bl4de befindet sich auf einem aufstrebenden Ast
Standard

Ja genau

sorry das ich so undeutlich war zum ferlgeichen der benutzereingabe ($code)
mit der zahl muss ich die zufalls zahl einer variable zuweisen, und genau das klappt nicht, hab leichte schwierigkeite zum ziel zu kommen

sry dafür

mfg der blade
bl4de ist offline   Mit Zitat antworten
Alt 01.04.2008, 22:24  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Zitat:
Zitat von bl4de Beitrag anzeigen
sorry das ich so undeutlich war zum ferlgeichen der benutzereingabe ($code)
mit der zahl muss ich die zufalls zahl einer variable zuweisen, und genau das klappt nicht, hab leichte schwierigkeite zum ziel zu kommen
Und ich hab leichte Schwierigkeiten dich zu verstehen

Du generierst einen zufälligen Code (der captcha-code) der dann durch dieses Script wie auch immer angezeigt wird , den soll der User dann abtippen und in das Feld "code" eintragen. Auf der nächsten Seite willst du jetzt prüfen, ob der Eingegebene Code (der jetzt in $_POST['code']) steht dem entspricht was ihm vorhin angezeigt wurde. Richtig?

Dazu musst du den captcha-code irgendwie auf die zweite Seite übertragen. Üblicherweise per $_SESSION...
Davon sehe ich in deinem Code aber nichts. Woher kommt also auf der zweiten Seite (die Seite mit den Überprüfungen) die Zahl/Nummer/code?
__________________
Today you...Tomorrow me.
agrajag ist offline   Mit Zitat antworten
Alt 02.04.2008, 09:22  
Neuer Benutzer
 
Registriert seit: 01.04.2008
Beiträge: 4
bl4de befindet sich auf einem aufstrebenden Ast
Standard

genau das wollte ich vo neuch wissen
und falls es hilft, der php code und das formular steht in einer datei , also sendet es die daten an sich selbst.
bl4de ist offline   Mit Zitat antworten
Alt 11.04.2008, 11:34  
Benutzer
 
Registriert seit: 11.04.2008
Beiträge: 64
pacey befindet sich auf einem aufstrebenden Ast
Standard

das problem ist:
PHP-Code:
printf"<h2>Dargestellt wird die Zahl %d</h2>"$n->getNum() ); 
hier wird wohl eine zahl erzeugt

PHP-Code:
$n->getNum() 
hier wird eine andere erzeugt.
du musst das explizit speichern du kannst net erwarten das eine klasse die zufallszahlen generiert das genau in dem moment bleiben lässt in dem du das willst und zufällig die gleiche wie vorhin erzeugt

schreib das ding in die session und frage die session ab.

PHP-Code:
$_SESSION['captchacode'] = $n->getNum();
printf "Blablubber Code bla" $_SESSION['captchacode'] ); 
-- später --
PHP-Code:
if ($code == $_SESSION['captchacode'] ) { print "wo du hast dir die mühe gemacht die zahl zu lesen }; 
pacey ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JavaScript/PHP: qooxdoo 0.7.1 - Teil 1 : Eine Einführung Zergling-new Tutorials 6 25.01.2008 10:41
JavaScript: Text Area: Scrollen zu einer Zeile im Text SvenLittkowski HTML, Usability und Barrierefreiheit 13 28.11.2007 16:31
CSS - Bild im div container überlappt andere container Buschdieb HTML, Usability und Barrierefreiheit 13 19.07.2007 23:17
MySQL-Volltextsuche SvenLittkowski Datenbanken 6 14.06.2007 19:58
spalte rechts ausrichten, text aber trotzdem linksbündig Crypi HTML, Usability und Barrierefreiheit 5 14.09.2006 11:35
CSS - Design (clear - Problem) HTML, Usability und Barrierefreiheit 7 21.12.2005 14:55
Text aus der DB verteilen PHP Tipps 2007 17 16.11.2005 12:04
[Erledigt] Link PHP Tipps 2005-2 10 20.07.2005 21:28
[Erledigt] Text auf Bild PHP Tipps 2005 9 28.04.2005 15:05
[Erledigt] DIV´s wollen nicht wie ich das will :-) HTML, Usability und Barrierefreiheit 22 28.03.2005 18:36
frames probleme HTML, Usability und Barrierefreiheit 6 18.01.2005 02:33
Per Button Text formatieren Igäl HTML, Usability und Barrierefreiheit 1 11.11.2004 06:25
Javascript: Text einfügen geht nich über "javascript:BL HTML, Usability und Barrierefreiheit 14 19.10.2004 21:44
Zeilenumbrüche aus einem formatierten Text entfernen woods PHP Tipps 2004 9 23.09.2004 12:50
txt-Datei erstellen d-81 PHP Tipps 2004 12 11.08.2004 20:31

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
captcha abfrage php, captcha text, text captcha, text captcha php, einfacher captcha, einfacher captcha php, php text captcha, captcha texte, php captcha abfrage, einfacher captcha code, php captcha text, text captcha script, text/captcha.php, captcha abfrage script, text für captcha, captcha-text, captcha php text, php captcha, php-text-captcha, php captcha abfragen

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:27 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum