@Vadim1899

Как Вам такая реализация чата? Безопасна ли?

Как Вам такая реализация чата?

Смущает:
spoiler
var objDiv = document.getElementById("message_box");
		objDiv.scrollTop = objDiv.scrollHeight;
		//prepare json data
		var msg = {
		message: mymessage,
		name: '<?=$loggedIn['personaname']?>,
		color : '<?php echo $colours[$user_colour]; ?>'
		};
		//convert and send data to server
		websocket.send(JSON.stringify(msg));


не может ли юзер как нибудь подменить свое имя? Какой-нибудь командой консольной, например, отправить не свой логин из <?=$loggedIn['personaname']?>, а какой-нибудь фейковый?
  • Вопрос задан
  • 229 просмотров
Решения вопроса 1
t-alexashka
@t-alexashka
Сразу пишу legacy код
Да, отправить можно. Предлагаю вам дополнить запрос к сокету еще параметром key:
var msg = {
    message: mymessage,
    name: '<?=$loggedIn['personaname']?>,
    key: '<?= $userKey ?>',
    color : '<?php echo $colours[$user_colour]; ?>'
    };

а сам $userKey это хеш логина с какой-нибудь солью, например:

$salt = 'SDFGH$W#%^UHdfHE$#%';
$userKey = md5($loggedIn['personaname'] . $salt);


а в скрипте который слушает новые сообщения проверять подлинность отправителя так:
if($key !== md5($name . $salt)) {
     // обработка поддельного запроса
} else {
     // все ок
}

где $key и $name это данные полученные из сокета с сообщением.
В таком случае даже если пользователь подменит personaname он не подменит key. а если попытается то в любом случае он не знает значени соли, и сработает первое условие.

Это самый простой вариант, чисто для наглядности.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Естественно может отправить что угодно.
И даже htmlя со скриптами отправить можно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы