Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne]zabezpieczenie czatu nodejs
Forum PHP.pl > Forum > Przedszkole
bartek4175
Witam!

Mam prosty czat na socketach i problem jest w tym, że socketa mozna tez przez konsole wyslac i łatwo jest się podszywac, nie mam pomysłu jak to naprawic
strona:
  1. socket.on('message', function(data){
  2. $('.chat-body').append('<div><div class="chat-message" id="chat-message"><div class="chat-name"><img src="'+data.avatar+'" class="img-rounded float-left avatar"><p><strong>'+data.login+'</strong></p></div><div class="chat-message"><p>'+data.message+'</p></div></div></div>');
  3. $('#message').val('');
  4. document.getElementById("chat").scrollTop = document.getElementById("chat").scrollHeight;
  5. });

  1. socket.emit("message", { admin: "<?php print($admin); ?>", avatar: "<?php print(htmlspecialchars(trim($_SESSION["steam_avatar"]))); ?>", login: "<?php print($_SESSION["steam_personaname"]); ?>", message: $("#messageee").val() });

serwer:
  1. socket.on('message', function(data){
  2. if(data.admin == 1) {
  3. var login = '<span style="color: red;">'+data.login+'</span>';
  4. } else if(data.admin == 2) {
  5. var login = '<span style="color: green;">'+data.login+'</span>';
  6. } else if(data.admin == 3) {
  7. var login = '<span style="color: orange;">[STREAMER] '+data.login+'</span>';
  8. } else {
  9. var login = data.login;
  10. }
  11. if(data.admin != 4) {
  12. var message = entities.encode(data.message);
  13. io.emit('message', { avatar: data.avatar, login: login, message: message });
  14. }
  15. });
Skie
Najlepiej zrób flood protection, czyli limit ile wiadomości może dany user posłać na czat w danym przedziale czasu, rozpoznając go np po IP.
bartek4175
Cytat(Skie @ 14.10.2016, 23:17:33 ) *
Najlepiej zrób flood protection, czyli limit ile wiadomości może dany user posłać na czat w danym przedziale czasu, rozpoznając go np po IP.

IP może być zmienne.
Fake sockety mogą tez być wysyłane co 3 sekundy. Tu nie chodzi o spam a podszywanie się pod kogoś.
Skie
Jak chcesz bronić ludzi przed podszywaniem się, to po prostu zaimplementuj mechanizm sesji, ustaw timeout na tę sesję i dodaj logowanie do czatu. WebSocket działa na serwerze HTTP, w momencie utworzenia socketa, leci request HTTP. Wymuś logowanie na typ etapie, by utworzenie połączenia było możliwe tylko z loginem i hasłem, po utworzeniu socketa ustaw timeout po jakim HTTP ma być zamknięte, co zamknie również WS.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.