2013-05-06 4 views
5

Sto tentando di creare un programma di accesso sicuro utilizzando i socket. Ecco il codice che ho scritto:Accesso protetto con socket

<?php 

$myusername=$_POST["username"]; 
$mypassword=$_POST["password"]; 
$host="localhost"; 
$port=80; 
$timeout=60; 
$target="/admin_area.php"; 
if($myusername=="admin" && $mypassword=="passwd") 

{ 
    if (!$sock=fsockopen("ssl://".$host,$port,$errnum,$errstr,$timeout)) 

    { 
    die ("Could not open socket: [$errnum] $errstr"); 
    } 

    else 
    { 
    $posted_vars=array("username"=>$myusername, 
         "password"=>$mypassword); 
    $body=""; 
    foreach ($posted_vars as $parameter=>$value) 

    { 
     $body.="&".$parameter."=".$value; 
    } 
    $headers="POST ".$target." HTTP/1.0 \r\n"; 
    $headers.="Content-Type: application/x-www-form-urlencoded \r\n"; 
    $headers.="Content-Length: ".strlen($body)." \r\n"; 
    $headers.="Connection: Keep-Alive \r\n"; 
    $headers.="Authorization: Basic ".base64_encode($myusername.":".$mypassword)." \r\n\r\n"; 
    fputs ($sock,$headers.$body); 
    $data=""; 
    while (!feof ($sock)) 

    { 
     $data.=fgets($sock,3000); 
    } 
    list($res_head,$res_body)=explode("\r\n\r\n",$data); 
    echo $res_body; 
    } 
} 

else 

{ 
    echo "Login not happened successfully"; 
} 

?> 

quando l'eseguo, i seguenti avvisi vengono restituiti:

Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol in C:\wamp\www\log_in.php on line 12

Warning: fsockopen(): Failed to enable crypto in C:\wamp\www\log_in.php on line 12

Warning: fsockopen(): unable to connect to ssl://localhost:80 (Unknown error) in C:\wamp\www\log_in.php on line 12

Could not open socket: [0]

Il problema è che questo codice funziona correttamente se tolgo le istruzioni per l'utilizzo del protocollo SSL in la funzione fsockopen(), ma avrei bisogno di implementare una connessione HTTP sicura.

Sarei molto grato a chiunque possa dirmi dove mi sbaglio. Grazie!

+3

non si dovrebbe usare $ port = 443; – Aivar

+0

Ho già provato questa opzione, ma in questo modo restituisce un altro errore: fsockopen(): impossibile connettersi a ssl: // localhost: 443 – prisca

+0

E sei sicuro che https localhost sia installato correttamente? – Aivar

risposta

2

Vorrei suggerire di apportare alcune modifiche qui per specificare esattamente quello che ti serve.

if (!$sock=fsockopen("ssl://".$host,$port,$errnum,$errstr,$timeout)) 

SSL non utilizza la porta 80, che sarà il default, quindi specificare la porta $ come 443.

E 'stato conosciuto per causare problemi su alcuni sistemi in cui la versione di SSL in uso non è specificato, e si affida a php per provare a rilevarlo. Vorrei suggerire cercando sia

if (!$sock=fsockopen("sslv2://".$host,443,$errnum,$errstr,$timeout)) 

o

if (!$sock=fsockopen("sslv3://".$host,443,$errnum,$errstr,$timeout)) 

A seconda se il server utilizza SSLv2 o SSLv3.

Ciò elimina ogni ambiguità e chiaramente indica al server come procedere