使用PHP Sessions进行私聊(PHP + Socket.io)

时间:2017-08-08 10:49:26

标签: php node.js redis socket.io

我正在开发一个使用php + socket.io的私人消息系统的网站。

从一开始我使用public function delete(User $user){ $user = User::findOrFail($user->id); $surveys=Survey::where('user_id',$user->id)->get(); $user->delete(); foreach($surveys as $survey){ $survey->delete(); } return redirect('/admin/user'); } Route::get('/admin/{user}/delete','AdminController@delete')->name('delete.user')->middleware('is_admin'); sender_idrecipient_idtext传递给socket.io,但后来意识到这很容易被篡改并想要使用我的php会话以某种方式确保socket.emit确实是sender_id

我现在有以下设置,但我真的不明白如何将会话从index.php传递到app.js,然后连接到app.js中的redis-server以获取保存user_id的PHPSESSID。

  • 服务器1运行nginx + php-fpm(index.php)
  • 运行带有socket.io(app.js)
  • 的node.js的服务器2
  • 运行redis进行会话管理的服务器3

我的代码现在看起来如下所示,但显然现在错过了redis部分,我真的很想帮助它。

谢谢!

的index.php

sender_id

app.js

<?php
    session_start();

    if ($_SESSION['user_id'] == false){
        header("Location:login.php");die;
    }
?>

<script>
var socket = io('https://app01.dev.domain.com:8895');

socket.on('connect', function(){
    console.log("Connected to websockets");
});
socket.on('event', function(data){});
socket.on('disconnect', function(){});

$('.chat-message').keypress(function (e) {
  if (e.which == 13) {
    console.log("send message");

    var friend_id = $(this).attr('id');

    friend_id = friend_id.split("-");
    friend_id = friend_id[3];    

    var obj = {
        recipient_id: friend_id, 
        text: $(this).val()
    };

    socket.emit('chat_message', obj);

    $(this).val('');
    return false; 
  }
});
</script>

1 个答案:

答案 0 :(得分:1)

  1. HTTP本身并不能防止MITM攻击,为防止MITM需要对服务器证书进行攻击。

  2. 要防止用户被欺骗,您需要身份验证,例如登录或Dropbox等秘密令牌。

  3. 添加证书固定,这只是一个行话,用于通过验证服务器发送的证书来验证您是连接到正确的服务器而不是MITM。 MITM过去比较困难,但WiFi可以很容易地连接到Hot Sports的错误端点,即使在家里我也看到了这一点。