OH CZEŚĆ

Utworzę aplikację czatu z serwerem napisanym węzłem.js i Faye.

  1. Klienci Subskrybuj /messages/new
  2. Wiadomości idą w ten sposób:

    klient --[publish to /messages]--> klient boczny serwera --[publish to /messages/new]--> Wszyscy klienci

Ale jeśli jestem anonimusem H4x0R, mogę edytować plik klienta JS i sprawić, że mój klient publikuje wiadomości nie na /messages, ale na /messages/new. Wiadomości przejdą przez klienta serwera serwera i przejdź bezpośrednio do klientów. Chcę przejść przez klienta serwera serwera, powodują, że serwer do Magic: Sprawdź token, zapisuje wiadomość w bazy danych Redis i dziennikach

Pytanie

Jak wyłączyć konkretny kanał publikowania przez klientów?

Czy powinienem pisać niestandardowy silnik? Nie znalazłem konfiguracji kanałów na serwerze Faye. Daj mi znać, jeśli chcesz zobaczyć jakiś kod, Dunno, co ci pokazać.

Uwaga

createServer = ->
    server = http.createServer()
    server.listen settings.serverPort

    bayeux = new faye.NodeAdapter        ##################################
        mount: '/faye'                   # This is "server side client"
        timeout: 45                      # lol
    bayeux.attach server                 ##################################
    fayeClient = bayeux.getClient()

    log "listening on port #{settings.serverPort}..."

    return [fayeClient, bayeux]

Zmiany

  • Edytuj: Zmień nazwę "Serwer" na "Serwer Side Client"
  • Edytuj2: Dodaj Note
0
voy 18 sierpień 2014, 15:14

2 odpowiedzi

Najlepsza odpowiedź

Cholera, jestem głupi.

Każda wiadomość przechodzi przez rozszerzenia serwera, po czym jest wysyłanie słuchaczy (innych klientów).

  1. Dodałem token dla klienta po stronie serwera.
  2. Sprawdź token w przedłużeniu przychodzącego
  3. Jeśli token jest nieprawidłowy, nie propaguj wiadomości (nie rób połączenia zwrotnego).

Mój kod:

incoming: (message, callback) ->
    # validate, if message has been sent by server
    if message.channel == channels.newMessages  # /messages/new
        # I added token for server side client
        if message.data.token != settings.serverToken
            return  # if message token is incorrect, don't run callback

    callback(message)  # send message to all listeners
0
voy 18 sierpień 2014, 16:03

W rzeczywistości jest to nieprawidłowe, jako aktualne Dokumentacja:

Zawsze powinieneś upewnić się, że Twoje rozszerzenie wywołuje wywołanie zwrotne, ponieważ nie można tego zrobić, mógłby zablokować dostawę innych wiadomości w tej samej prośbie.

Aby osiągnąć odrzucenie wiadomości przez serwer, należy dodać do niej właściwość błędu i przekazać je do wyłączania

if (token !== msgToken)
  message.error = 'Invalid subscription auth token';

// Call the server back now we're done
callback(message);
0
Martin Řezník 18 sierpień 2017, 09:30