Функциональность сайта нарушена или взломана

На моем веб-сайте есть система обмена сообщениями пользователей. У меня есть < button id="msg" data-id="1"> data-id соответствует user_ id в таблице users . Теперь я отправляю сообщение пользователю, используя ajax jquery и php. Через jquery я получаю data-id данных .msg кнопки .msg и отправляю сообщение пользователю, используя php.

Теперь моя проблема в том, что у меня есть ограничения некоторых людей, отправляющих сообщение кому-то другому. Но те могут легко отправить эти сообщения незаконно, изменив data-id в режиме разработчиков. Как я могу это предотвратить?

Вы всегда можете использовать некоторые хеши, созданные на стороне сервера, отправленные на передние концы, чтобы гарантировать, что идентификатор пользователя, отправленный обратно на сервер, является тем, который первоначально открыл страницу. Для этого нет необходимости звонить в базу данных.

 <button id="msg" data-id="1" data-hash="1234abc"> 

где вы вычисляете хэш с солью / секретом и идентификатором данных. И после отправки вы просто проверяете, является ли поставленный хэш таким же, как и в случае новых вычислений.

поэтому в php вы можете сделать что-то вроде:

 $userId = 1; $secret = 'yourVeryPersonalSecretSentence'; $hash = sha1($secret . $userId); // would create something like "d0be2dc421be4fcd0172e5afceea3970e2f3d940" 

в вашем html вы бы:

 <button id="msg" data-id="1" data-hash="d0be2dc421be4fcd0172e5afceea3970e2f3d940"> 

и при вызове ajax вы просто дважды проверяете:

 $userId = $idValueFromForm; $secret = 'yourVeryPersonalSecretSentence'; $hash = $hashFromForm; $newHash = sha1($secret . $userId); if ($newHash === $hash) { // the userid was the same as sent to the browser ... } 

надеюсь это поможет.

Вы не можете запретить людям редактировать HTML-код вашего сайта, все, что может быть отредактировано в любом интерфейсе.

Что касается ограничений, я не на 100%, что вы имеете в виду, однако, если пользователь не может отправить сообщение пользователю b, то вам нужно сделать это на стороне сервера. Верните значение false и отобразите соответствующее сообщение для интерфейса пользователя.

Вы всегда должны предположить, что что-то может пойти не так, что люди хотят взломать ваш сайт, что thay хочет сделать SQL-инъекцию.

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