【发布时间】:2016-04-07 11:41:59
【问题描述】:
我正在尝试使用 PHP 创建一个简单的聊天。一切都按预期工作,但是遇到了潜在的“漏洞”。我正在使用 AJAX 来检索滚动上的所有聊天数据(很像 Facebook、Twitter 等)。现在问题来了:我目前将聊天 id 存储在动态创建的 div 本身中。例如“
<div class="chat" chat_id="4">
....
</div>
人们可以通过浏览器更改 chat_id,这会导致任何输入的文本以不正确的 id 存储在数据库中。防止这种情况的最佳方法是什么?
我目前想到了一种方法,其中所有检索/发起的聊天详细信息(发件人、聊天 ID)都存储在 $_SESSION 变量中。这基本上是出于验证目的,以确保聊天 id 对当前用户有效。
有没有更好的方法来做到这一点?谢谢。
【问题讨论】:
-
为什么会有
chat_idattr? -
他们也可以只修改他们的 ajax 调用。为什么要阻止用户这样做?如果他们想在另一个聊天(他们有权访问)中写作,为什么不让他们呢?为什么不简单地在 js 中设置呢?尽管如此,它仍然不安全 - 没有客户端调用/数据。根据定义,客户端可以修改他们发送/执行/接收的所有内容。
-
如果将聊天id保存在会话中,则可以在检索消息时检查用户。如果用户在会话中没有该聊天 ID,则不要渲染任何内容。作为旁注,我建议将
chat_id=""属性更改为data-chat-id=""属性。-和data-*的良好实践 -
永远不要相信客户端发送的数据
-
像黑客一样思考,任何人都可以制作 XHR 来做 UI 不允许的事情。真正的安全在服务器上,如果他们修改了 ID 但无权访问它,则应该抛出 403。如果他们确实有访问权限,那么尽管您的 UI 不允许他们做他们想做的事,但他们被允许这样做
标签: javascript php jquery html chat