国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

關(guān)于workerman的健壯性的一個(gè)問(wèn)題,connect的時(shí)候故意傳錯(cuò)一個(gè)參數(shù),程序就崩潰了

小七他哥

我在websocket的鏈接里加了個(gè)參數(shù)類似下面:

ws://127.0.0.1:8019/?sid=3670549-360dMrtp

然后服務(wù)端 onConnect 方法里做了如下驗(yàn)證:

$worker->onConnect = function (\Workerman\Connection\TcpConnection $connection) {
    try {
        $connection->uniqueId = $connection->getLocalIp() . '-' . $connection->getLocalPort() . '-' . $connection->worker->id . '-' . $connection->id;

        $connection->onWebSocketConnect = function (\Workerman\Connection\TcpConnection $connection, $http_header) {
            if (
                !isset($_SERVER['HTTP_ORIGIN']) ||
                ($_SERVER['HTTP_ORIGIN'] != 'http://local.tieba.com:8018' && $_SERVER['HTTP_ORIGIN'] != 'https://tieba.baidu.com')
            ) {
                throw new Exception('鏈接unique_id=' . $connection->uniqueId . ',鏈接參數(shù) HTTP_ORIGIN 錯(cuò)誤', 1025);
            }

            if (!isset($_GET['sid']) || !$_GET['sid']) {
                throw new Exception('鏈接unique_id=' . $connection->uniqueId . ',鏈接參數(shù)錯(cuò)誤,sid為空', 1026);
            }

            $connection->sid = $_GET['sid'];
        };

        $connection_ip = $connection->getRemoteIp();

        $connection->maxSendBufferSize = 10485760;

        if ($connection_ip) {
            if (in_array($connection_ip, $GLOBALS['ip_black_list'])) {
                throw new Exception('ip=' . $connection_ip . ',unique_id=' . $connection->uniqueId . ' 的用戶已被加入到ip黑名單,直接關(guān)閉該鏈接', 1027);
            }
            if (isset($GLOBALS['ip_list'][$connection_ip])) {
                if ($GLOBALS['ip_list'][$connection_ip]['num'] >= ONE_IP_MAX_WEBSOCKET_NUM) {
                    $GLOBALS['ip_black_list'][] = $connection_ip;
                    throw new Exception('ip=' . $connection_ip . ',unique_id=' . $connection->uniqueId . ' 的用戶超過(guò)了最大鏈接數(shù),直接關(guān)閉該鏈接', 1029);
                }
                $GLOBALS['ip_list'][$connection_ip]['num'] += 1;
            } else {
                $GLOBALS['ip_list'][$connection_ip]['num'] = 1;
            }
        }
    } catch (Exception $exception) {
        $connection->close_reason = $exception->getMessage() . ':' . $exception->getCode();
        $connection->close("\r\n");
    }

    wlog('new connection ' . $connection->uniqueId . ' from ip ' . $connection_ip, false, 1, $GLOBALS['system_set']);
};

上面的代碼沒(méi)有問(wèn)題,嘿嘿,但是如果鏈接改成了:

ws://127.0.0.1:8019/?sidx=3670549-360dMrtp

我原本的意思是沒(méi)有驗(yàn)證到 sid 參數(shù),應(yīng)該輸出一個(gè)log并且關(guān)閉這個(gè)鏈接,然后沒(méi)啥事了,但是現(xiàn)在是程序老是報(bào)一大堆的錯(cuò)誤,如下,我檢查了半天感覺(jué)我的業(yè)務(wù)代碼是沒(méi)有什么問(wèn)題的,想請(qǐng)大神們幫我看下是不是框架有問(wèn)題了?

[2021-07-14 15:38:31] new connection 172.17.0.2-8910-0-1 from ip 172.17.0.1
2021-07-14 15:38:31 pid:1569 Exception: 鏈接unique_id=172.17.0.2-8910-0-1,鏈接參數(shù)錯(cuò)誤,sid為空 in /var/www/diary/server/WorkermanWebsocketServer.php:116
Stack trace:
#0 /var/www/diary/lib/Workerman/Protocols/Websocket.php(392): {closure}()
#1 /var/www/diary/lib/Workerman/Protocols/Websocket.php(57): Workerman\Protocols\Websocket::dealHandshake()
#2 /var/www/diary/lib/Workerman/Connection/TcpConnection.php(600): Workerman\Protocols\Websocket::input()
#3 /var/www/diary/lib/Workerman/Events/Select.php(294): Workerman\Connection\TcpConnection->baseRead()
#4 /var/www/diary/lib/Workerman/Worker.php(2419): Workerman\Events\Select->loop()
#5 /var/www/diary/lib/Workerman/Worker.php(1543): Workerman\Worker->run()
#6 /var/www/diary/lib/Workerman/Worker.php(1373): Workerman\Worker::forkOneWorkerForLinux()
#7 /var/www/diary/lib/Workerman/Worker.php(1347): Workerman\Worker::forkWorkersForLinux()
#8 /var/www/diary/lib/Workerman/Worker.php(1680): Workerman\Worker::forkWorkers()
#9 /var/www/diary/lib/Workerman/Worker.php(1629): Workerman\Worker::monitorWorkersForLinux()
#10 /var/www/diary/lib/Workerman/Worker.php(544): Workerman\Worker::monitorWorkers()
#11 /var/www/diary/server/WorkermanWebsocketServer.php(181): Workerman\Worker::runAll()
#12 {main}
2021-07-14 15:38:31 pid:1569 Worker[1569] process terminated

Warning: (null)(): supplied resource is not a valid stream resource in Unknown on line 0

Call Stack:
    0.0004    1382960   1. {main}() /var/www/diary/server/WorkermanWebsocketServer.php:0
    0.0172    2878392   2. Workerman\Worker::runAll() /var/www/diary/server/WorkermanWebsocketServer.php:181
    0.0486    2980704   3. Workerman\Worker::monitorWorkers() /var/www/diary/lib/Workerman/Worker.php:544
    0.0486    2980704   4. Workerman\Worker::monitorWorkersForLinux() /var/www/diary/lib/Workerman/Worker.php:1629
  108.0958    2982184   5. Workerman\Worker::forkWorkers() /var/www/diary/lib/Workerman/Worker.php:1680
  108.0958    2982184   6. Workerman\Worker::forkWorkersForLinux() /var/www/diary/lib/Workerman/Worker.php:1347
  108.0958    2982184   7. Workerman\Worker::forkOneWorkerForLinux() /var/www/diary/lib/Workerman/Worker.php:1373
  108.0980    2981432   8. Workerman\Worker->run() /var/www/diary/lib/Workerman/Worker.php:1543
  108.1004    3034448   9. Workerman\Events\Select->loop() /var/www/diary/lib/Workerman/Worker.php:2419
  118.1001    3203544  10. Workerman\Connection\TcpConnection->baseRead() /var/www/diary/lib/Workerman/Events/Select.php:294
  118.1001    3204184  11. Workerman\Protocols\Websocket::input() /var/www/diary/lib/Workerman/Connection/TcpConnection.php:600
  118.1002    3204184  12. Workerman\Protocols\Websocket::dealHandshake() /var/www/diary/lib/Workerman/Protocols/Websocket.php:57

Warning: (null)(): supplied resource is not a valid stream resource in Unknown on line 0

Call Stack:
    0.0004    1382960   1. {main}() /var/www/diary/server/WorkermanWebsocketServer.php:0
    0.0172    2878392   2. Workerman\Worker::runAll() /var/www/diary/server/WorkermanWebsocketServer.php:181
    0.0486    2980704   3. Workerman\Worker::monitorWorkers() /var/www/diary/lib/Workerman/Worker.php:544
    0.0486    2980704   4. Workerman\Worker::monitorWorkersForLinux() /var/www/diary/lib/Workerman/Worker.php:1629
  108.0958    2982184   5. Workerman\Worker::forkWorkers() /var/www/diary/lib/Workerman/Worker.php:1680
  108.0958    2982184   6. Workerman\Worker::forkWorkersForLinux() /var/www/diary/lib/Workerman/Worker.php:1347
  108.0958    2982184   7. Workerman\Worker::forkOneWorkerForLinux() /var/www/diary/lib/Workerman/Worker.php:1373
  108.0980    2981432   8. Workerman\Worker->run() /var/www/diary/lib/Workerman/Worker.php:1543
  108.1004    3034448   9. Workerman\Events\Select->loop() /var/www/diary/lib/Workerman/Worker.php:2419
  118.1001    3203544  10. Workerman\Connection\TcpConnection->baseRead() /var/www/diary/lib/Workerman/Events/Select.php:294
  118.1001    3204184  11. Workerman\Protocols\Websocket::input() /var/www/diary/lib/Workerman/Connection/TcpConnection.php:600
  118.1002    3204184  12. Workerman\Protocols\Websocket::dealHandshake() /var/www/diary/lib/Workerman/Protocols/Websocket.php:57

2021-07-14 15:38:31 pid:1011 worker[diaryWorkermanWebsocketServer:1569] exit with status 64000
[2021-07-14 15:38:31] Worker 0 started
[2021-07-14 15:38:41] new connection 172.17.0.2-8910-0-1 from ip 172.17.0.1
2021-07-14 15:38:41 pid:1570 Exception: 鏈接unique_id=172.17.0.2-8910-0-1,鏈接參數(shù)錯(cuò)誤,sid為空 in /var/www/diary/server/WorkermanWebsocketServer.php:116
Stack trace:
#0 /var/www/diary/lib/Workerman/Protocols/Websocket.php(392): {closure}()
#1 /var/www/diary/lib/Workerman/Protocols/Websocket.php(57): Workerman\Protocols\Websocket::dealHandshake()
#2 /var/www/diary/lib/Workerman/Connection/TcpConnection.php(600): Workerman\Protocols\Websocket::input()
#3 /var/www/diary/lib/Workerman/Events/Select.php(294): Workerman\Connection\TcpConnection->baseRead()
#4 /var/www/diary/lib/Workerman/Worker.php(2419): Workerman\Events\Select->loop()
#5 /var/www/diary/lib/Workerman/Worker.php(1543): Workerman\Worker->run()
#6 /var/www/diary/lib/Workerman/Worker.php(1373): Workerman\Worker::forkOneWorkerForLinux()
#7 /var/www/diary/lib/Workerman/Worker.php(1347): Workerman\Worker::forkWorkersForLinux()
#8 /var/www/diary/lib/Workerman/Worker.php(1680): Workerman\Worker::forkWorkers()
#9 /var/www/diary/lib/Workerman/Worker.php(1629): Workerman\Worker::monitorWorkersForLinux()
#10 /var/www/diary/lib/Workerman/Worker.php(544): Workerman\Worker::monitorWorkers()
#11 /var/www/diary/server/WorkermanWebsocketServer.php(181): Workerman\Worker::runAll()
#12 {main}
2021-07-14 15:38:41 pid:1570 Worker[1570] process terminated

Warning: (null)(): supplied resource is not a valid stream resource in Unknown on line 0

Call Stack:
    0.0004    1382960   1. {main}() /var/www/diary/server/WorkermanWebsocketServer.php:0
    0.0172    2878392   2. Workerman\Worker::runAll() /var/www/diary/server/WorkermanWebsocketServer.php:181
    0.0486    2980704   3. Workerman\Worker::monitorWorkers() /var/www/diary/lib/Workerman/Worker.php:544
    0.0486    2980704   4. Workerman\Worker::monitorWorkersForLinux() /var/www/diary/lib/Workerman/Worker.php:1629
  118.1110    2982184   5. Workerman\Worker::forkWorkers() /var/www/diary/lib/Workerman/Worker.php:1680
  118.1110    2982184   6. Workerman\Worker::forkWorkersForLinux() /var/www/diary/lib/Workerman/Worker.php:1347
  118.1110    2982184   7. Workerman\Worker::forkOneWorkerForLinux() /var/www/diary/lib/Workerman/Worker.php:1373
  118.1130    2981432   8. Workerman\Worker->run() /var/www/diary/lib/Workerman/Worker.php:1543
  118.1157    3034448   9. Workerman\Events\Select->loop() /var/www/diary/lib/Workerman/Worker.php:2419
  128.1156    3203544  10. Workerman\Connection\TcpConnection->baseRead() /var/www/diary/lib/Workerman/Events/Select.php:294
  128.1156    3204184  11. Workerman\Protocols\Websocket::input() /var/www/diary/lib/Workerman/Connection/TcpConnection.php:600
  128.1156    3204184  12. Workerman\Protocols\Websocket::dealHandshake() /var/www/diary/lib/Workerman/Protocols/Websocket.php:57

Warning: (null)(): supplied resource is not a valid stream resource in Unknown on line 0

Call Stack:
    0.0004    1382960   1. {main}() /var/www/diary/server/WorkermanWebsocketServer.php:0
    0.0172    2878392   2. Workerman\Worker::runAll() /var/www/diary/server/WorkermanWebsocketServer.php:181
    0.0486    2980704   3. Workerman\Worker::monitorWorkers() /var/www/diary/lib/Workerman/Worker.php:544
    0.0486    2980704   4. Workerman\Worker::monitorWorkersForLinux() /var/www/diary/lib/Workerman/Worker.php:1629
  118.1110    2982184   5. Workerman\Worker::forkWorkers() /var/www/diary/lib/Workerman/Worker.php:1680
  118.1110    2982184   6. Workerman\Worker::forkWorkersForLinux() /var/www/diary/lib/Workerman/Worker.php:1347
  118.1110    2982184   7. Workerman\Worker::forkOneWorkerForLinux() /var/www/diary/lib/Workerman/Worker.php:1373
  118.1130    2981432   8. Workerman\Worker->run() /var/www/diary/lib/Workerman/Worker.php:1543
  118.1157    3034448   9. Workerman\Events\Select->loop() /var/www/diary/lib/Workerman/Worker.php:2419
  128.1156    3203544  10. Workerman\Connection\TcpConnection->baseRead() /var/www/diary/lib/Workerman/Events/Select.php:294
  128.1156    3204184  11. Workerman\Protocols\Websocket::input() /var/www/diary/lib/Workerman/Connection/TcpConnection.php:600
  128.1156    3204184  12. Workerman\Protocols\Websocket::dealHandshake() /var/www/diary/lib/Workerman/Protocols/Websocket.php:57

2021-07-14 15:38:41 pid:1011 worker[diaryWorkermanWebsocketServer:1570] exit with status 64000
[2021-07-14 15:38:41] Worker 0 started
[2021-07-14 15:38:51] new connection 172.17.0.2-8910-0-1 from ip 172.17.0.1
2021-07-14 15:38:51 pid:1571 Exception: 鏈接unique_id=172.17.0.2-8910-0-1,鏈接參數(shù)錯(cuò)誤,sid為空 in /var/www/diary/server/WorkermanWebsocketServer.php:116
Stack trace:
#0 /var/www/diary/lib/Workerman/Protocols/Websocket.php(392): {closure}()
#1 /var/www/diary/lib/Workerman/Protocols/Websocket.php(57): Workerman\Protocols\Websocket::dealHandshake()
#2 /var/www/diary/lib/Workerman/Connection/TcpConnection.php(600): Workerman\Protocols\Websocket::input()
#3 /var/www/diary/lib/Workerman/Events/Select.php(294): Workerman\Connection\TcpConnection->baseRead()
#4 /var/www/diary/lib/Workerman/Worker.php(2419): Workerman\Events\Select->loop()
#5 /var/www/diary/lib/Workerman/Worker.php(1543): Workerman\Worker->run()
#6 /var/www/diary/lib/Workerman/Worker.php(1373): Workerman\Worker::forkOneWorkerForLinux()
#7 /var/www/diary/lib/Workerman/Worker.php(1347): Workerman\Worker::forkWorkersForLinux()
#8 /var/www/diary/lib/Workerman/Worker.php(1680): Workerman\Worker::forkWorkers()
#9 /var/www/diary/lib/Workerman/Worker.php(1629): Workerman\Worker::monitorWorkersForLinux()
#10 /var/www/diary/lib/Workerman/Worker.php(544): Workerman\Worker::monitorWorkers()
#11 /var/www/diary/server/WorkermanWebsocketServer.php(181): Workerman\Worker::runAll()
#12 {main}
2021-07-14 15:38:51 pid:1571 Worker[1571] process terminated

Warning: (null)(): supplied resource is not a valid stream resource in Unknown on line 0

Call Stack:
    0.0004    1382960   1. {main}() /var/www/diary/server/WorkermanWebsocketServer.php:0
    0.0172    2878392   2. Workerman\Worker::runAll() /var/www/diary/server/WorkermanWebsocketServer.php:181
    0.0486    2980704   3. Workerman\Worker::monitorWorkers() /var/www/diary/lib/Workerman/Worker.php:544
    0.0486    2980704   4. Workerman\Worker::monitorWorkersForLinux() /var/www/diary/lib/Workerman/Worker.php:1629
  128.1293    2982184   5. Workerman\Worker::forkWorkers() /var/www/diary/lib/Workerman/Worker.php:1680
  128.1293    2982184   6. Workerman\Worker::forkWorkersForLinux() /var/www/diary/lib/Workerman/Worker.php:1347
  128.1294    2982184   7. Workerman\Worker::forkOneWorkerForLinux() /var/www/diary/lib/Workerman/Worker.php:1373
  128.1310    2981432   8. Workerman\Worker->run() /var/www/diary/lib/Workerman/Worker.php:1543
  128.1338    3034448   9. Workerman\Events\Select->loop() /var/www/diary/lib/Workerman/Worker.php:2419
  138.1337    3203544  10. Workerman\Connection\TcpConnection->baseRead() /var/www/diary/lib/Workerman/Events/Select.php:294
  138.1338    3204184  11. Workerman\Protocols\Websocket::input() /var/www/diary/lib/Workerman/Connection/TcpConnection.php:600
  138.1338    3204184  12. Workerman\Protocols\Websocket::dealHandshake() /var/www/diary/lib/Workerman/Protocols/Websocket.php:57

Warning: (null)(): supplied resource is not a valid stream resource in Unknown on line 0

Call Stack:
    0.0004    1382960   1. {main}() /var/www/diary/server/WorkermanWebsocketServer.php:0
    0.0172    2878392   2. Workerman\Worker::runAll() /var/www/diary/server/WorkermanWebsocketServer.php:181
    0.0486    2980704   3. Workerman\Worker::monitorWorkers() /var/www/diary/lib/Workerman/Worker.php:544
    0.0486    2980704   4. Workerman\Worker::monitorWorkersForLinux() /var/www/diary/lib/Workerman/Worker.php:1629
  128.1293    2982184   5. Workerman\Worker::forkWorkers() /var/www/diary/lib/Workerman/Worker.php:1680
  128.1293    2982184   6. Workerman\Worker::forkWorkersForLinux() /var/www/diary/lib/Workerman/Worker.php:1347
  128.1294    2982184   7. Workerman\Worker::forkOneWorkerForLinux() /var/www/diary/lib/Workerman/Worker.php:1373
  128.1310    2981432   8. Workerman\Worker->run() /var/www/diary/lib/Workerman/Worker.php:1543
  128.1338    3034448   9. Workerman\Events\Select->loop() /var/www/diary/lib/Workerman/Worker.php:2419
  138.1337    3203544  10. Workerman\Connection\TcpConnection->baseRead() /var/www/diary/lib/Workerman/Events/Select.php:294
  138.1338    3204184  11. Workerman\Protocols\Websocket::input() /var/www/diary/lib/Workerman/Connection/TcpConnection.php:600
  138.1338    3204184  12. Workerman\Protocols\Websocket::dealHandshake() /var/www/diary/lib/Workerman/Protocols/Websocket.php:57

2021-07-14 15:38:51 pid:1011 worker[diaryWorkermanWebsocketServer:1571] exit with status 64000
[2021-07-14 15:38:51] Worker 0 started
2602 4 0
4個(gè)回答

小七他哥

我看代碼應(yīng)該是這段出的問(wèn)題:

try {
                    \call_user_func(isset($connection->onWebSocketConnect)?$connection->onWebSocketConnect:$connection->worker->onWebSocketConnect, $connection, $buffer);
                } catch (\Exception $e) {
                    Worker::log($e);
                    exit(250);
                } catch (\Error $e) {
                    Worker::log($e);
                    exit(250);
                }

因?yàn)槲掖a中拋出了異常導(dǎo)致的,但是我改成拋出我自定義的異常類

throw new NotDoException('鏈接unique_id=' . $connection->uniqueId . ',鏈接參數(shù)錯(cuò)誤,sid為空', 1026);

還是會(huì)觸發(fā)這里的異常處理,請(qǐng)問(wèn)一下這種情況該怎么處理呢?難道只能放棄我自己的拋出異常的想法嗎?

  • 暫無(wú)評(píng)論
phpcreeper

1、你query傳的是sidx,程序里判斷卻用的是sid,要細(xì)心??;
2、workerman正是因?yàn)榻巡旁谖覀儗懘a不嚴(yán)謹(jǐn)或者遇到異常時(shí)拋出執(zhí)行堆棧等等措施方便我們排查問(wèn)題;

  • 小七他哥 2021-07-14

    大哥,我是故意這樣寫的啊,我正確傳沒(méi)問(wèn)題,但是如果傳錯(cuò)了就報(bào)一大堆錯(cuò),這樣別人如果攻擊我的話,那豈不是很容易高一大堆錯(cuò)誤?

  • phpcreeper 2021-07-14

    @8083: 一句話: 就你這種場(chǎng)景的測(cè)報(bào)錯(cuò)才正常; 題外話: 任何外來(lái)的數(shù)據(jù)從來(lái)都不要相信、不論你這個(gè)場(chǎng)景是不是測(cè)試、這個(gè)問(wèn)題的定性在我看來(lái)它就是就是人為的BUG;至于workerman框架提供的或者PHP內(nèi)置的報(bào)錯(cuò)機(jī)制那是必然要有的、目的就是為了方便開發(fā)者排錯(cuò);至于攻擊我覺(jué)得是另外一個(gè)層面的安全大問(wèn)題了、沒(méi)有絕對(duì)的安全、只有相對(duì)一層層的安全措施加持、就好比你這段代碼扔生產(chǎn)環(huán)境之前是不是起碼也得經(jīng)過(guò)層層的檢驗(yàn)?zāi)亍Q句話: 我們接納有意義的報(bào)錯(cuò)、但是我們必須盡可能在最后一道上線關(guān)口之前將報(bào)錯(cuò)消滅到最小危害程度。

法師

正常情況發(fā)生notice錯(cuò)誤,workerman不會(huì)拋出這個(gè)異常,進(jìn)程不會(huì)退出重啟。

你的程序不斷退出,是因?yàn)槟銟I(yè)務(wù)捕獲了notice錯(cuò)誤并拋出異常,但是你業(yè)務(wù)又沒(méi)去捕獲這個(gè)異常,導(dǎo)致異常傳遞到workerman框架,workerman能做的也只能是記錄異常重啟當(dāng)前進(jìn)程。workerman這么做是沒(méi)問(wèn)題的。如果不這樣做,那么你可能都無(wú)法發(fā)現(xiàn)這個(gè)異常,以為程序正常,實(shí)際上是有問(wèn)題的。

如果你不想進(jìn)程因?yàn)閚otice重啟,你就不要捕獲notice后拋出異常,或者拋出異常后你自己捕獲下。最根本的方法就是測(cè)試好程序,不要有bug。

  • 小七他哥 2021-07-14

    我代碼沒(méi)有notice錯(cuò)誤,只是拋出了異常。

小七他哥

問(wèn)題解決了,確實(shí)是我自己的問(wèn)題,產(chǎn)生了notice錯(cuò)誤,打擾大家了。

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??