2016-04-07 2 views
0

Я пытаюсь создать простой чат с помощью PHP. Все работает так, как ожидалось, однако натолкнулось на потенциальный «эксплойт». Я использую AJAX для извлечения всех данных чата в прокрутке (так же, как Facebook, Twitter и т. Д.). Теперь возникает проблема: я в настоящее время храню идентификатор чата внутри самого динамически созданного div. Например»PHP Chat - Сохранение id в html5?

<div class="chat" chat_id="4"> 
    .... 
</div> 

Можно было бы быть в состоянии изменить chat_id через браузер, который будет вызывать любой введенный текст, который будет храниться в некорректной идентификатор в базе данных. Что бы быть лучшим способом, чтобы предотвратить это?

я в настоящее время думал о способе, в котором все извлекаемые/инициированные детали чата (отправитель, чат идентификатора) хранятся в $ _SESSION переменного в . Это в основном для целей проверки, чтобы убедиться, что чат идентификатор действителен для текущего пользователя.

Есть ли лучший способ сделать это? Спасибо.

+1

Почему у вас есть 'chat_id' Аттрибут? – user3284463

+3

Они также могут просто изменить свой вызов ajax. Почему вы запретили пользователям делать это? Если они хотят писать в другом чате (к которому у них есть доступ), почему бы не позволить им? Почему бы вам просто не установить это в js? Тем не менее, это все равно небезопасно - клиентские вызовы/данные отсутствуют. Клиент может по определению изменять все, что они отправляют/делают/получают. – h2ooooooo

+2

Если вы храните идентификатор чата в сеансе, вы можете проверить пользователя при получении сообщений. Если у пользователя нет этого идентификатора чата в сеансе, ничего не визуализируйте. В качестве примечания, я предлагаю изменить атрибут 'chat_id =" "' с атрибутом data-chat-id = "" '. хорошая практика с '-' и' data- * ' –

ответ

-1

Вы можете использовать шифрование здесь, вот пример 128 битным Rijndael использование шифрования

<?php 
/* 
creating cipher object using Rijndael encyrption algorithm with Cipher-block chaining (CBC) as mode of AES encryption 
Here I have chosen 128 bit Rijndael encyrption 
*/ 
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); 

$key = 'abcdefghijklmnopqrstuvwxyzABCDEF'; // choose a strong iv (32 bytes) 

$iv = 'abcdefghijklmnop'; // choose a strong iv (16 bytes) 

$plainText = 'This is plain text.'; //here you can use your "id" that you want to encrypt 

function encrypt($data, $key, $iv) { 
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv)); 
} 

function decrypt($data,$key,$iv) { 
    return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($data), MCRYPT_MODE_CBC, $iv); 
} 
echo $ciphertext = encrypt($plainText, $key, $iv); 
echo "<br>"; 
echo $plaintext = decrypt($ciphertext, $key, $iv);