Kategorien

Ich im Web

New Tag Cloud 1

acid2 (1) active sync (1) adobe air (1) alterskontrolle (1) amerika (1) apache (3) aplle (1) arcor (4) ask.com (1) atari (1) axxium (2) backtrack (3) backup (1) be-quiet (1) besichtigungstermin (1) bilder (2) bill gates (1) blasc (1) blender (1) bliss (2) blog (1) bookmarks (1) bootloader (1) british telecom (1) buffed (1) bundeskanzler (1) bundesregierung (1) c++ (1) c64 (1) capi (1) cisco (1) commodre (1) cooling (2) css (1) datenbank (1) datenschutz (1) dbox (1) death adder (1) del.icio.us (1) desktop search (1) die bahn (1) domain controller (1) dsl (2) eier (1) ekg (1) enterasys (1) erotik (1) essen (2) evag (1) facebook (2) feedburner (1) feeds (1) finanzamt (1) firebug (1) firefox (6) flash (1) flickr (2) foxmarks (1) frankfurt (1) freakiest.de (1) fritzbox (1) fun (2) games (1) gesundheit (2) google (2) google analytics (10) google calendar (1) google desktop (1) google earth (4) google mail (4) google reader (6) google reader notifier (1) gpo (1) gpt (1) gruga (1) grundgesetzt (1) h.323 (1) heimnetzgruppe (1) heißluftballon (1) hipath (5) ibm (1) ifilter (1) iis (2) internet explorer (6) ipx (1) isa (1) isdn (1) ista (12) jaiku (1) jeff dunham (1) k770i (1) k850i (1) karnvel (1) kommentar (1) köln (1) küche (1) kühlschrank (1) kündigung (1) lightning (2) logitech (1) logo (1) mail (1) maildrop (1) markler (1) mbr (1) mcdonalds (1) media player (1) meinvz (3) messe essen (1) microblogging (3) microsoft (6) mieten (1) minimizetotray (1) monitoring (1) montgolfiade (1) mpe (3) ms office (1) mssql (1) münster (2) n6600gt (2) nasa (1) navision (1) nes (1) netcraft (1) netzteil (1) new tag cloud (17) next4u.de (3) nintendo (1) nostalgie (1) npd (1) nvidia (1) nürnberg (1) o'reilly (1) openid (1) openoffice (1) opensearch (1) opensuse (1) panoramio (1) parlament (1) pc (1) petition (1) photosynth (2) php (1) picasa (2) plugin (6) politik (4) post (1) postfix (1) powershell (3) pownce (4) preis (1) premiere (1) quickcam (1) razor (1) rdp (1) re:publica (1) readware (1) recensio.org (1) regierung (1) rss (2) saturn (1) second life (3) security (2) sensorlock (2) server (1) servicepack (1) siemens (6) sim (7) simulator (1) snes (1) snmp (2) society (1) sony ericsson (4) sp2 (1) spam (2) speed (1) spülmaschine (1) ssl (4) stayfriends (1) steve ballmer (1) streik (2) t3n (1) tacra 8100 (1) tagging (2) teamspeak (1) tecra (4) tecra 8100 (1) telekom (2) templates (2) terminal server (1) tf3d (1) themes (2) thunderbird (4) tobi.elements (1) tor (1) torte (1) touchscreen (1) trackback (1) trait (1) triplehead2go (1) tsqlib (1) twitter (2) typo3 (1) u4us (1) umzug (8) update (1) urlaub (1) verdi (1) video (2) virtual pc 2007 (1) virtual server (1) vista (2) vmware (1) vodafone (2) voip (2) vorratsdatenspeicherung (2) voxfax (1) voxtron (1) wallpaper (1) weave (3) web (1) web2.0 (1) webslice (1) werbung (1) wiimote (3) window xp mode (1) windows 7 (11) windows server (2) windows vista (1) windows xp (2) winmote (3) wlan (2) wohung (1) wordpress (20) wotlk (1) wow (7) yac (9) yodm3d (1) youtube (6) zalman (2) zensur (3) 2008 (1)

« »


Warum soll ein Chat keine Authentifizierung machen?

30. September 2008, 22:24

Ich bin gestern gefragt worden: warum macht der yac die Authentifizierung nicht selber? Um diese Frage zu verstehen, erkläre ich erst einmal, wie der Login beim yac funktioniert.

Es fängt alles mit einem einfachen Login-Script an. Ich nehme hier mal ein PHP-Script:

PHP:
  1. $data = get_login_data();
  2. $request = "http://" . SERVER . ":" . PORT . "/login?nick=" . $data['nick'] . "&room=" . $data['room'] . "&color=" . $data['color'] . "&right=" . $data['right'] . "&ip=" . $_SERVER['REMOTE_ADDR'] . "&loginkey=" . LOGINKEY;
  3. $fh = @fopen($request, "r");
  4. if ($fh)
  5. {
  6.     $buffer = "";
  7.     while (!feof($fh))
  8.         $buffer .= fgets($fh, 512);
  9.     fclose($fh);
  10.     $buffer = ltrim($buffer);
  11.     if (substr($buffer, 0, 6)) == "ERROR:")
  12.         die("Fehler beim Login");
  13.     list($yacsid, $iss) = explode("|", $buffer);
  14. }
  15. else
  16.     die("Es konnte keine Verbindung mit dem Chat ergestellt werden, vielleicht ist der Chat offline?");

Zeile 2: get_login_data() ist hier nur ein Beispiel. Hier soll verdeutlich werden, dass es völlig egal ist, von wo die Daten kommen, wichtig ist nur, dass der Request-String zusammen gebaut werden kann.
Zeile 3: Und genau das passiert hier. Der Request-String enthält alle nötigen Daten wie Nick, Raum, Farbe, Rechte und die IP des Clients.
Zeile 4ff: Nun der fopen() + lesen. Der Chat analysiert nun die Parameter des Request-Strings. Ist die Anfrage gültig, wird die yacsid + ISS erzeugt und diese zusammen mit den anderen Daten temporär gespeichert. Die yacsid und der ISS im Format "yacsid|ISS" wird zurück gegeben und steht im PHP-Script in $buffer zur Verfügung. Ist die Anfrage ungültig (weil die IP von der die Anfrage kommt keine Zugriffserlaubnis hat oder der LOGINKEY ungültig ist) gibt der Chat "ERROR: " + den Grund zurück.
Zeile 11: Prüfen wir noch schnell, ob der Chat einen Fehler gemeldet hat.
Zeile 13: Kein Fehler. Wir splitten die Ausgabe noch in $yacsid und $iss auf.

Bisher haben wir aber noch keinen echten Login, sondern nur die Login-Anfrage. Dies erfolgt mit dem IFrame:

PHP:
  1. <html>
  2. <head>
  3.     <title>yac</title>
  4. </head>
  5. <frameset rows="*, 50" frameborder="0" framespacing="0">
  6.     <frame name="output" src="http://<?php echo(SERVER) ?>:<?php echo(PORT) ?>/out?yacsid=<?php echo($yacsid); ?>" scrolling="auto" noresize frameborder="0" framespacing="0">
  7.     <frame name="input" src="http://<?php echo(URL_ZUR_INPUT_PHP) ?>?yacsid=<?php echo($yacsid); ?>;&iss=<?php echo($iss) ?>" scrolling="no" noresize frameborder="0" framespacing="0">
  8. </frameset>
  9. </html>

Zeile 6: Hier folgt der Aufruf des Output-Streams des Chats. Genau hier wird von dem Chat die temporär gespeicherte Login-Anfrage zu einem echten Login.
Zeile 7: Hier wird noch eine input.php aufgerufen.

input.php

PHP:
  1. <html>
  2. <script language="JavaScript"
  3.     function clearForm()
  4.     {
  5.         document.chatinput.msg.select();
  6.         document.chatinput.msg.focus();
  7.     }
  8. </script>
  9. <form name="chatinput" action="http://<?php echo(SERVER) ?>:<?php echo(PORT); ?>/in" method="get" onSubmit="clearForm()">
  10.     <input type="hidden" name="yacsid" value="<?php echo($_GET['cookie']); ?>">
  11.     <input type="hidden" name="iss" value="<?php echo($_GET['iss']); ?>">
  12.     <input type="text" name="msg" size="100">&nbsp;<input type="submit" value="Send">
  13. </form>
  14. </body>
  15. </html>

Warum ist dieses Vorgehen nun besser als bei Chats, die den Login selbst durchführen? Nun ja, ob es wirklich besser ist, will ich nicht behaupt, aber ich finde es macht mehr Sinn. Durch dieses Verfahren bleibt es dem Betreiber völlig offen, wie die Authentifizierung aussehen soll. Beispiel: ich habe für meinen Blog das OpenID-Plugin installiert, so dass man sich mit diesem Authentifizieren kann. Würde der yac die Authentifizierung nun selber machen, könnten sich diese User nicht am yac anmelden (btw: ich sollte den Demo Chat mal wieder zum laufen bringen, damit man genau das sehen kann).



Kommentar hinterlassen

* Ein Code-Highligter ist vorhanden. Nutze [code]...[/code] um den Code einzufärben. Du kannst auch as, asp, c, cpp, csharp, css, delphi, html, java, js, mysql, perl, php, python, ruby, smarty, sql, vb, vbnet oder xml verwenden.