PHPWebSocketサーバーはOriginヘッダーとReferrerヘッダーにアクセスできません

アナンド・シン

シンプルなPHPWebSocketサーバーがあります

完全なコードは次のとおりです:https//gist.github.com/hack4mer/e40094001d16c75fe5ae8347ebffccb7

while (true) {

$changed = $clients;
socket_select($changed, $null, $null, 0, 10);

//check for new socket
if (in_array($socket, $changed)) {
    $socket_new = socket_accept($socket); //accpet new socket
    $clients[] = $socket_new; //add socket to client array

   //THIS DOES NOT WORK
   print_r($_SERVER);
   die();

}

ブラウザの[ネットワーク]タブで、次のリクエストを確認できます。

Request URL: ws://localhost:12345/
Provisional headers are shown
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,hi;q=0.8,ms;q=0.7
Cache-Control: no-cache
Connection: Upgrade
Host: localhost:12345
Origin: http://localhost

ただし、スクリプトでこれらのリクエストヘッダーにアクセスできません。

私の目的は、WebSocketへのアクセスを少数のホストのみに制限することです

アナンド・シン

ハンドシェイクの前にヘッダーチェックを行うことで、この問題を解決しました。

完全なコード:https//gist.github.com/hack4mer/e40094001d16c75fe5ae8347ebffccb7

function perform_handshaking($receved_header,$client_conn, $host, $port)
{
$headers = array();
$lines = preg_split("/\r\n/", $receved_header);
foreach($lines as $line)
{
    $line = chop($line);
    if(preg_match('/\A(\S+): (.*)\z/', $line, $matches))
    {
        $headers[$matches[1]] = $matches[2];
    }
}

 //HEADERS AVAILABLE HERE -> $headers

$secKey = $headers['Sec-WebSocket-Key'];
$secAccept = base64_encode(pack('H*', sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));
//hand shaking header
$upgrade  = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
"Upgrade: websocket\r\n" .
"Connection: Upgrade\r\n" .
"WebSocket-Origin: $host\r\n" .
"WebSocket-Location: ws://$host:$port/demo/shout.php\r\n".
"Sec-WebSocket-Accept:$secAccept\r\n\r\n";
socket_write($client_conn,$upgrade,strlen($upgrade));
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ヘッダーにアクセスできません

分類Dev

Angular js $ httpサービス:-catchブロック内でヘッダーにアクセスできません

分類Dev

HttpClient:応答ヘッダーにアクセスできません

分類Dev

サーバーとクライアントにヘッダーを設定した後でも、エラー「要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません」

分類Dev

サーバーを削除できません:Apacheヘッダー

分類Dev

ヘッダーでJWTをサーバーに送信できません

分類Dev

Angular 2:httpリクエストの応答ヘッダーにアクセスできません

分類Dev

モバイルヘッダーはクリックできません

分類Dev

応答を取得できませんでした-HTTPヘッダーが送信された後、サーバーはヘッダーを追加できません

分類Dev

kubernetesダッシュボードエラー: 'メトリッククライアントヘルスチェックに失敗しました:サーバーは要求されたリソースを見つけることができませんでした(サービスヒープスターを取得します)。

分類Dev

角度のある$ http応答内の「WWW-authenticate」ヘッダーにアクセスできません

分類Dev

Spring Integration Routerのヘッダー値にアクセスできませんint:mapping value

分類Dev

Angular4のPOST応答ヘッダーからプロパティにアクセスできません

分類Dev

クロスドメインを使用してヘッダーをajaxに渡すことはできません

分類Dev

Androidのアクセシビリティ-TextViewsをヘッダーまたはリンクとしてアナウンスできません

分類Dev

テーブルビューヘッダーのようなUICollectionViewヘッダービュー(セクションヘッダーではありません)

分類Dev

ヘッダーマッピングが指定されていません。レコード値に名前でアクセスできません(Apache Commons CSV)

分類Dev

送信後にヘッダーを設定できません。:RaspbianWebサーバーでのSendgridメール応答

分類Dev

スクロールモバイルで固定ヘッダーを非表示にできませんか?

分類Dev

AWS Lambdaでヘッダーにアクセスする方法は?

分類Dev

この方法でHTTPヘッダーにアクセスできますか?

分類Dev

要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しないため、Axiosとのリンクを要求できません

分類Dev

MinGWにヘッダーを含めることはできません

分類Dev

スクリプトはヘッダーをcsvに書き込みません

分類Dev

wxWidgetsアプリケーションにstd :: threadヘッダーを含めることはできません

分類Dev

WKWebViewPOSTリクエストにヘッダーを設定できません

分類Dev

リクエストにヘッダーを追加できません

分類Dev

OAuthBearerAuthenticationMiddleware-HTTPヘッダーが送信された後、サーバーはヘッダーを追加できません

分類Dev

例外:ヘッダーのプロバイダーはありません!(アプリ-> API->ヘッダー)

Related 関連記事

  1. 1

    ヘッダーにアクセスできません

  2. 2

    Angular js $ httpサービス:-catchブロック内でヘッダーにアクセスできません

  3. 3

    HttpClient:応答ヘッダーにアクセスできません

  4. 4

    サーバーとクライアントにヘッダーを設定した後でも、エラー「要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません」

  5. 5

    サーバーを削除できません:Apacheヘッダー

  6. 6

    ヘッダーでJWTをサーバーに送信できません

  7. 7

    Angular 2:httpリクエストの応答ヘッダーにアクセスできません

  8. 8

    モバイルヘッダーはクリックできません

  9. 9

    応答を取得できませんでした-HTTPヘッダーが送信された後、サーバーはヘッダーを追加できません

  10. 10

    kubernetesダッシュボードエラー: 'メトリッククライアントヘルスチェックに失敗しました:サーバーは要求されたリソースを見つけることができませんでした(サービスヒープスターを取得します)。

  11. 11

    角度のある$ http応答内の「WWW-authenticate」ヘッダーにアクセスできません

  12. 12

    Spring Integration Routerのヘッダー値にアクセスできませんint:mapping value

  13. 13

    Angular4のPOST応答ヘッダーからプロパティにアクセスできません

  14. 14

    クロスドメインを使用してヘッダーをajaxに渡すことはできません

  15. 15

    Androidのアクセシビリティ-TextViewsをヘッダーまたはリンクとしてアナウンスできません

  16. 16

    テーブルビューヘッダーのようなUICollectionViewヘッダービュー(セクションヘッダーではありません)

  17. 17

    ヘッダーマッピングが指定されていません。レコード値に名前でアクセスできません(Apache Commons CSV)

  18. 18

    送信後にヘッダーを設定できません。:RaspbianWebサーバーでのSendgridメール応答

  19. 19

    スクロールモバイルで固定ヘッダーを非表示にできませんか?

  20. 20

    AWS Lambdaでヘッダーにアクセスする方法は?

  21. 21

    この方法でHTTPヘッダーにアクセスできますか?

  22. 22

    要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しないため、Axiosとのリンクを要求できません

  23. 23

    MinGWにヘッダーを含めることはできません

  24. 24

    スクリプトはヘッダーをcsvに書き込みません

  25. 25

    wxWidgetsアプリケーションにstd :: threadヘッダーを含めることはできません

  26. 26

    WKWebViewPOSTリクエストにヘッダーを設定できません

  27. 27

    リクエストにヘッダーを追加できません

  28. 28

    OAuthBearerAuthenticationMiddleware-HTTPヘッダーが送信された後、サーバーはヘッダーを追加できません

  29. 29

    例外:ヘッダーのプロバイダーはありません!(アプリ-> API->ヘッダー)

ホットタグ

アーカイブ