WinFuture-Forum.de: Sicherheitscode - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Sicherheitscode


#1 Mitglied ist offline   hasch 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.790
  • Beigetreten: 28. Januar 04
  • Reputation: 0
  • Wohnort:Localhost
  • Interessen:Ach so viele ...

geschrieben 07. Februar 2006 - 15:11

Habe gerade nen kleines Script geschrieben, welches ein Image mit nem Code ausgibt:

<?php  function gen_zahlen($min, $max, $anz) 
{	   
$werte = range($min, $max);	   
mt_srand ((double)microtime()*1000000);	   
for($x = 0; $x < $anz; $x++) 
{			
$i = mt_rand(1, count($werte))-1;			
$erg[] = $werte[$i];			
array_splice($werte, $i, 1);	   
}	   
return $erg;  
}	

$zufalls_array = gen_zahlen(1, 9, 6);  
$ausgabe = join("", $zufalls_array);  
header("Content-type: image/png");  
$breite = 100;  $hoehe = 20;  
$bild = imagecreate($breite, $hoehe);  
$weiß = imagecolorallocate($bild, 255, 255, 255);
  $schwarz = imagecolorallocate($bild, 0, 0, 0);
imagefilledrectangle($bild, 0, 0, $breite, $hoehe, $weiß);
imagestring($bild, 20, 1, 1, $ausgabe, $schwarz);
imagepng($bild);  imagedestroy($bild);
?>


Diesen kann ich ja auch wunderbar unter mein Kontaktformular einfügen,... aber mir fehlt gerade eine Idee, wie ich den Code überprüfen kann, d.h. wenn die Bestätigung vom User in das Formular eingetragen wurde!

Hab das ganze schon einmal gemacht, aber ich weiß nicht mehr wie und mir fällt grad nix ein.
Wäre euch dankbar, wenn ihr mir mal schnell eine Idee posten könntet!
0

Anzeige



#2 Mitglied ist offline   Joel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 516
  • Beigetreten: 22. März 05
  • Reputation: 0

geschrieben 07. Februar 2006 - 16:00

Bei mir gibt es leider eine Fehlermeldung aus:

Zitat

Die Grafik "http://localhost/test.php" kann nicht angezeigt werden, weil sie Fehler enthält.

Im Quelltext steht allerdings:
<br />
<b>Fatal error</b>:  Call to undefined function imagecreate() in <b>D:\www\test.php</b> on line <b>18</b><br />


Meine Idee:
Beim erstellen jedes Buchstaben speichert es ihn in dieselbe String. Danach wird sie verschlüsselt (crypt($string,$string)) und danach als input hide mitgeschickt. Danach muss man im Browser die Zeichen abtippen und schickt diese mit der verschlüsselten String an den Server zurück. Der Server überprüft dann, ob die Eingabe verschlüsselt (crypt($eingabe,$eingabe)) == verschlüsselte String ist! ;)

MfG Joel

Dieser Beitrag wurde von Joel bearbeitet: 07. Februar 2006 - 16:03

0

#3 Mitglied ist offline   hasch 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.790
  • Beigetreten: 28. Januar 04
  • Reputation: 0
  • Wohnort:Localhost
  • Interessen:Ach so viele ...

geschrieben 07. Februar 2006 - 16:12

Das is ne geile Idee, ich danke dir ;)
Bei mir gibts keinen fehler aus, wer weiß woran es liegt...
0

#4 Mitglied ist offline   Joel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 516
  • Beigetreten: 22. März 05
  • Reputation: 0

geschrieben 07. Februar 2006 - 16:16

Ich denke, dass es an der Funktion imagecreate() liegt. Vielleicht wird die bei mir nicht geladen oder so ;)
Es könnte auch daran liegen, dass ich WAMP verwende!? ;)

Wenn mir jemand helfen könnte, wäre ich sehr dankbar ;)

MfG Joel
0

#5 Mitglied ist offline   hasch 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.790
  • Beigetreten: 28. Januar 04
  • Reputation: 0
  • Wohnort:Localhost
  • Interessen:Ach so viele ...

geschrieben 07. Februar 2006 - 16:27

Die gdlib is bei dir geladen? Ich nutze Xampp...

Könntest du mir mal noch sagen, wie ich das mit dem input hide mache, weil hab dazu nix gefunden ;)
0

#6 Mitglied ist offline   Joel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 516
  • Beigetreten: 22. März 05
  • Reputation: 0

geschrieben 07. Februar 2006 - 16:43

Das ist ganz einfach:
Du brauchst folgendes Formular:
<form action="" method="post">
<input name="eingabe" size="40" maxlength="60" value="" /> 
<input type="hidden" name="string" value="" />
<input type="submit" value="Abschicken" />
</form>


Da gibt man den Code ein den man abschreiben muss:
<input name="eingabe" size="40" maxlength="60" value="" />

Da ist der verschlüsselte String:
<input type="hidden" name="string" value="" />
0

#7 Mitglied ist offline   hasch 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.790
  • Beigetreten: 28. Januar 04
  • Reputation: 0
  • Wohnort:Localhost
  • Interessen:Ach so viele ...

geschrieben 07. Februar 2006 - 16:48

Ja danke, das Formular is ja klar, mir war nur der Begriff hidden unter type unbekannt.
Danke!

EDIT:
Es tritt jetzt aber folgendes Problem auf, wenn ich das Image vom Script gen.php genrieren lasse, dann kann ich den String nicht ohne weiteres an das Script in der index.php weitergeben...
Ich kann den String zwar in der gen.php speichern, aber wie soll das Script diesen dann bekommen?

Dieser Beitrag wurde von hasch bearbeitet: 07. Februar 2006 - 16:54

0

#8 Mitglied ist offline   Joel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 516
  • Beigetreten: 22. März 05
  • Reputation: 0

geschrieben 07. Februar 2006 - 17:02

Mit Bildern in PHP kenne ich mich noch nicht aus, aber kann man das Bild nicht auch in der index.php erzeugen lassen? Dann hättest du das Problem ja gelöst!

Werde kurz in einem Buch nachschlagen ;)
0

#9 Mitglied ist offline   hasch 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.790
  • Beigetreten: 28. Januar 04
  • Reputation: 0
  • Wohnort:Localhost
  • Interessen:Ach so viele ...

geschrieben 07. Februar 2006 - 17:03

Ja ich versuchs mal mit index.php und nem $_GET[] Befehl...
0

#10 Mitglied ist offline   Lord_eAgle 

  • Gruppe: aktive Mitglieder
  • Beiträge: 286
  • Beigetreten: 05. Januar 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Büron, LU.ch

geschrieben 07. Februar 2006 - 17:16

du musst dein php.ini anpassen, wenn du die fehlermeldungen von php sehen willst. weiss jetzt nicht mehr auswendig wo und hab auch keines zur hand. gibt aber dort nen bereich show_errmessages oder sowas ähnliches.
Eingefügtes Bild Eingefügtes Bild
0

#11 Mitglied ist offline   Joel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 516
  • Beigetreten: 22. März 05
  • Reputation: 0

geschrieben 07. Februar 2006 - 17:26

@Lord_eAgle

Ich hab gerade in meinem schlauen Buch nachgeschaut ;)
Man muss vor dem wert extension=php_gd2.php oder extension=php_gd.php das Semikolon entfernen ;)

Jetzt klappt es!

Dieser Beitrag wurde von Joel bearbeitet: 07. Februar 2006 - 17:27

0

#12 Mitglied ist offline   hasch 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.790
  • Beigetreten: 28. Januar 04
  • Reputation: 0
  • Wohnort:Localhost
  • Interessen:Ach so viele ...

geschrieben 07. Februar 2006 - 20:46

Ich habe die Datei jetzt innerhalb der index.php generieren lassen mit $_GET['code'] == 'image' -> index.php?code=image
aber gleiches Prob, er generiert mir ja 2 unterschiedliche Code, da ich die index.php quasi 2x den Code generieren lasse...
0

#13 Mitglied ist offline   hasch 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.790
  • Beigetreten: 28. Januar 04
  • Reputation: 0
  • Wohnort:Localhost
  • Interessen:Ach so viele ...

geschrieben 07. Februar 2006 - 22:02

So habe es jetzt folgendermaßen gelöst:

(1) Es wird in der index.php ein Code generiert namens $txt_ausgabe
-> Erstellen einer .txt namens -> key_$txt_ausgabe.txt
-> Inhalt ist der Code, der auch für das Image verwendet wird
(2) gen.php generiert das Image und liest den Code aus key_$txt_ausgabe.txt aus und gibt ihm im Bild aus.

Ist zwar noch nicht so sicher, aber einigermaßen, aber letztes Mal war das irgendwie einfacher :P
0

#14 Mitglied ist offline   Joel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 516
  • Beigetreten: 22. März 05
  • Reputation: 0

geschrieben 08. Februar 2006 - 08:54

Ich hab da aus Spass auch noch ein Script geschrieben, welches meiner Meinung sicher ist.
Es generiert 2 Bilder. Das eine ist ein ganz normales Bild und das andere ist noch mit Linien durchzogen (dadurch kann es nicht automatisch ausgelesen werden, hoffe ich zumindest)! Man sollte sich also für ein Bild entscheiden und den restlichen Code wegwerfen.

<?php

$width = 80;
$height = 20;
$font = 5;

srand((double)microtime()*time());
$ns .= rand(0,9);
$ns .= rand(0,9);
$ns .= rand(0,9);
$ns .= rand(0,9);
$ns .= rand(0,9);
$ns .= rand(0,9);

$image = imagecreate($width,$height);

$white = imagecolorallocate($image,255,255,255);
$black = imagecolorallocate($image,0,0,0);

$ns_x = ($width - (imagefontwidth($font) * strlen($ns))) / 2;
$ns_y = ($height - imagefontheight($font)) / 2;

imagestring($image,$font,$ns_x,$ns_y,$ns,$black);

// Bild 1
imagepng($image,"image1.png");

// Bild 2
for ($i = 0; $i <= $height; $i = $i + 3) {
imageline($image,0,$i,$width,$i,$black);
}
imagepng($image,"image2.png");


$ns_crypt = crypt($ns,$ns);

if (isset($_POST['input'])) {
$input_crypt = crypt($_POST['input'],$_POST['input']);

if ($input_crypt == $_POST['crypt']) {
$message = "Richtig!";
}
else {
$message = "Falsch!";
}

}

$form = <<<FORM
<img src="image1.png" border="0" />
<img src="image2.png" border="0" />
<form action="{$_SERVER['PHP_SELF']}" method="post">
<input type="hidden" name="crypt" value="{$ns_crypt}" />
<input name="input" size="10" maxlength="6" value="" /><br />
<input type="submit" value="Überprüfen" />
</form>
{$message}
FORM;

echo $form;

?>


Natürlich kann jeder der will mein Script brauchen :ph34r:

MfG Joel
0

#15 Mitglied ist offline   hasch 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.790
  • Beigetreten: 28. Januar 04
  • Reputation: 0
  • Wohnort:Localhost
  • Interessen:Ach so viele ...

geschrieben 08. Februar 2006 - 10:25

Mit sicher meinte ich, dass der aktuelle Sicherheitscode ja nur in einer .txt ausgegeben wird und ein interssierter Angreifer einfach jedes mal den {key} aus key_{key}.txt auslesen könnte.

Ich danke dir, schaue mir dein Script nachher mal an! :ph34r:
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0