我正在实现一个消息系统(私人消息,如果你愿意的话),我希望能够通过文本链接显示用户拥有的消息列表,所以我不需要按钮来打开它。message_id(数据库中的唯一值)将通过 URL 传递。(类似于 www.example.com/message/view/16)。假设我检查以确保用户 ID 的会话与发送消息的用户 ID 匹配,这样可以吗?为了更安全,我可以附加一个随机数并将其设置为会话,然后在查看时检查它。
我应该忘记这个想法并坚持使用提交按钮来查看消息吗?
POST 请求不会比 GET 请求提供更多安全性:任何半体面的 Web 调试工具都可以伪造 POST 请求。你永远不应该相信用户输入的数据。始终仔细检查授权以确保安全!
也就是说,GET
请求语义与您在此处尝试执行的操作相匹配。
HTTP 标准说GET
请求应该是可重复的,没有任何不重要的后果。例如,使用 GET 请求查看数据就足够了(并且可能做一些小事情,比如增加一个计数器,因为这些都是非常微不足道的后果)。事实上,GET
和HEAD
是被认为是“安全”的两种请求方法。
另一方面,POST
请求预计会产生重要的后果,例如发送消息或下订单。您不想意外执行两次的东西。如今,大多数浏览器也尊重这一点,在重新加载页面时警告用户会导致POST
再次执行请求。
使用 GET 值查看消息是更好的主意,因为假设用户保持登录状态,这将允许他们为消息添加书签等。