猿问

如何在PHP和MySql中保存和管理会话ID和用户ID

我需要澄清对PHP 会议的疑问。

我正在创建Android app,在某些活动中我需要进行查询以提取用户数据。

目前,这样做,我将用户发送idPHP通过隐藏文件EditTextAndroid app

Android app用户id不保存在shared preferences,但我得到它通过对一个请求的Facebook帐户试剂盒(用于认证使用Facebook的账户套件)。

因此,当我需要用户时id,可以从Facebook Account Kit中请求它,然后通过一个隐藏字段将其发送到PHP文件中,该文件将在稍后的WHERE子句中使用Query

但是,出于安全原因,现在,我希望使用会话来保存用户id,然后将用户保留id在中session

我的一个朋友告诉我,如果一个黑客获取idsession,用户在其中id保存,它可以发生,它已经过期,他不能得到任何东西。

问题是我不了解如何保存session IDuserID以及如何在database表体系结构级别上对其进行管理。

我必须将保存在session IDdatabase,我创建了一个名为“ Sessions”的表,其中包含3个字段:

  • 会话ID,

  • ID_User,

  • 数据访问。

要插入用户IDdatabase我应该始终从应用程序传递到PHP文件,因此,如果一个黑客可以发现用户id,我认为他很可能获得有关信息sessionsWHERE条款ID_user = ID_user

完全正确?

如果我是对的,那有什么比我做的事更安全的呢?

那么如果IDSession每个接入的改变,要改变它在Sessions表中的MySql数据库,我应该从交换机Android appPHP用户再次id通过查询更新我应该改变会话id与和访问的日期ID_User = ID_UserWHERE的条款。

精确的?

如果有人对我有任何建议或对我如何处理情况提出批评,并且比我的有更好的解决方案,那么我会乐于听。

如果我对会议的工作方式一无所知,请原谅我从你那里偷走的时间。

不管怎么说,还是要谢谢你。


哔哔one
浏览 185回答 1
1回答

湖上湖

PHP会话基于Cookies。当用户打开网页时,PHP会设置一个cookie作为响应。浏览器会自动确保在后续请求中,也会在请求中发送cookie,因此$ _SESSION变量起作用。我认为,它们不能提供太多的安全性。现在,恶意用户必须使用Cookie来代替用户ID。始终使用HTTPS来保护请求。使用Android应用程序时,您将要进行自定义请求,因此,一旦收到第一次调用,就必须明确设置cookie(您必须将其保留在客户端;这不是一个好方法) 。会议的通常工作方式如下:首次使用$ _SESSION设置值时,PHP会设置一个会话cookie,该会话cookie本质上是一个随机字符串。在后台(在后端)中,PHP将针对此字符串值维护一个对象(键-值对)。(SessionKey1 = { key: value, key2: value2 };这可能在磁盘文件系统上或在缓存层(例如Redis)上,具体取决于您的服务器配置)当您设置/更新/删除会话中的密钥时,将SessionKey1被修改。现在,您可以为自己创建类似的行为。在Android App端找到userId时,将其发送到后端,在会话表中创建一行(会话ID为随机字符串,用户ID为UserId)。对于每个请求,请在后端将这个SessionId与请求(在正文或标头中)一起发送,然后在Sessions表中检查是否收到了sessionId退出。如果是,请获取用户ID并进行处理。这是另一种方法(可能有点安全)帐户工具包验证后找到访问令牌时发送给后端从Facebook API验证令牌(链接)验证API还会返回用户信息,并将其映射到您的用户数据(来自数据库结构)。(这将确保令牌始终有效,用户将无法放置随机令牌来进行攻击,因为这将使来自Facebook API的验证失败)。生成一个UUID,用UUID作为sessionId,您的userId存取资料创建时间(创建行时)到期时间(当前时间+ X天)发送此UUID作为响应。现在在Android端,将此UUID保存在某处。创建一个请求拦截器,为所有请求在自定义标头(例如X-<application_name>-Auth)中设置此UUID&nbsp;。在每个请求的后端,访问此标头,检查其是否过期,从会话表中获取用户ID,然后继续。我认为他可以很好地获取有关带有WHERE子句ID_user = ID_user的会话的信息。完全正确?你是绝对正确的。但是,保护数据库层应该是与应用程序开发分开的任务。您如何看待黑客能够首先执行查询?如果人们找到了一种在数据库上运行原始查询的方法,那么他所造成的损失将不仅仅是提取数据。如果我是对的,那有什么比我做的事更安全的呢?没有正确的答案,您只需要尽力保护应用程序安全即可。确保您的应用程序遵循最佳安全实践。例如-使用HTTPS,防止SQL Injection.s(搜索OWASP Vulnerabilities)
随时随地看视频慕课网APP
我要回答