我的网站上有一个用户消息系统。
我有一个< button id="msg" data-id="1">
data-id
对应user_ id
表中的users
列。现在我使用ajax jquery和php向用户发送消息。
通过jquery我得到data-id
点击的.msg
按钮并使用php将msg发送给该用户。
现在我的问题是我限制某些人向其他人发送消息。但是那些可以通过在开发者模式中更改data-id
来轻松地非法发送这些消息。我可以阻止这种情况吗?
答案 0 :(得分:4)
您无法阻止人们编辑您网站的HTML,通常可以编辑任何前端。
关于限制,我不是100%你的意思,但是,如果用户a不能向用户b发送消息,那么你必须做那个服务器端。返回false并向用户前端显示相应的消息。
答案 1 :(得分:2)
您始终可以使用发送到前端的某些服务器端生成的哈希值来确保发送回服务器的用户ID是最初打开该页面的用户ID。甚至没有必要为此调用数据库。
<button id="msg" data-id="1" data-hash="1234abc">
使用salt / secret和data-id计算哈希值。提交后,您只需检查提供的哈希值是否与新计算的哈希值相同。
所以在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
...
}
希望这会有所帮助。
答案 2 :(得分:1)
你总是要假设某些事情可能出错,人们想破解你的网站,想要进行SQL注入。
您必须仔细检查所有内容,进行额外验证以确保您的应用程序是安全的。目前,任何人都可以向所有用户发送消息,创建简单的脚本,这是一个巨大的安全问题。