Php websocket szerver azonosítási probléma (authentikáció)
2021-01-06T22:45:25+01:00
2021-01-07T21:00:05+01:00
2022-08-12T00:12:27+02:00
kamba
Sziasztok.Egy a php hivatalos oldaláról leszedett szkriptet próbálgatok.Egy újlenyomatot akarok átadni a szerver részére mellyel szeretném megelőzni a hamis csatlakozásokat.GET paraméterként adom át de amikor összehasonlítom a szerveren összeállított hash-el akkor sehogy sem akar egyezni.kérlek vessetek rá 1 pillantást.

$kicsoda=$_SESSION['id']; $fp=sha1($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].$kicsoda.'ABCDEFGH'); print "<script> var realsession=true; var host = 'ws://127.0.0.1:9000/websockets.php?id=".$kicsoda."&auth=".$fp."'; </script>";


szerveroldalon:

set_time_limit(0); $host='127.0.0.1'; $port='9000'; $hash=sha1($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].$_GET['id']."ABCDEFGH"); $server = stream_socket_server("tcp://$host:$port", $errno, $errstr); if (!$server) { die("$errstr ($errno)"); } $clients = array($server); $write = NULL; $except = NULL; while (true) { $changed = $clients; stream_select($changed, $write, $except, 10); if (in_array($server, $changed)) { $client = @stream_socket_accept($server); if (!$client){ continue; } $id=$_GET['id']; $clients[$id] = $client; $ip = stream_socket_get_name( $client, true ); stream_set_blocking($client, true); $headers = fread($client, 1500); handshake($client, $headers, $host, $port); stream_set_blocking($client, false); @fwrite($clients[$id], mask($ip . ' connected')); if($_GET['auth']!=$hash){ @fwrite($clients[$id], mask($ip . ' disconnected')); @fclose($clients[$id]); } $found_socket = array_search($server, $changed); unset($changed[$found_socket]); } foreach ($changed as $changed_socket) { $ip = stream_socket_get_name( $changed_socket, true ); $buffer = stream_get_contents($changed_socket); if ($buffer == false) { @fclose($changed_socket); $found_socket = array_search($changed_socket, $clients); unset($clients[$found_socket]); } $unmasked = unmask($buffer); $response = mask($unmasked); $kinek=json_encode($unmasked)->{'id'}; @fwrite($clients[$kinek], $response); } sleep(1); } fclose($server);


a probléma evvel van:

if($_GET['auth']!=$hash)
Megköszönöm ha van valakinek értelmes magyarázata hogy mit rontok el.Köszönöm
Mutasd a teljes hozzászólást!
kiprinteltem,s megegyeznek.Egyébkét a probléma megoldódott,valószínüleg egy régebbi hibás cache-elt fájlt töltött be a rendszer szóval valami gyorstár probléma lehetett.szóval ilyen formában működik a szerver.
Mutasd a teljes hozzászólást!

abcd