2013-05-06 21 views
5

Próbuję utworzyć bezpieczny program logowania za pomocą gniazd. Oto kod pisałem:Bezpieczne logowanie przy użyciu gniazda

<?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"; 
} 

?> 

Kiedy go uruchomić następujące ostrzeżenia są zwracane:

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]

Kwestia jest taka, że ​​ten kod działa poprawnie jeśli usunąć Instrukcja korzystania z protokołu SSL w funkcja fsockopen(), ale muszę zaimplementować bezpieczne połączenie HTTP.

Byłbym bardzo wdzięczny każdemu, kto może mi powiedzieć, gdzie się mylę. Dzięki!

+3

jeśli nie powinieneś używać $ port = 443; – Aivar

+0

Próbowałem już tej opcji, ale w ten sposób zwraca inny błąd: fsockopen(): nie można połączyć się z ssl: // localhost: 443 – prisca

+0

Jesteś pewien, że https localhost jest poprawnie uruchomiony? – Aivar

Odpowiedz

2

Proponuję wprowadzić tutaj pewne zmiany, aby dokładnie określić, czego potrzebujesz.

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

SSL Nie używa portu 80, który będzie domyślnym, więc określić port $ jako 443.

Został wiadomo, że powodują problemy na niektórych systemach, gdzie wersja SSL nie jest używany określone i polega na php, aby spróbować go wykryć. Sugerowałbym próbuje albo

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

lub

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

zależności jeśli serwer używa SSLv2 lub SSLv3.

To usuwa wszelkie niejasności i wyraźnie instruuje serwer, jak postępować

Powiązane problemy