2012-04-21 54 views
0

我正在运行一些用户帐户(没有cookie,php会话系统)的基本网站。 我想存储用户生成的一些数据,只能看到他们自己。用户数据数据库结构

对于我来自所有用户的数据存储在一个表中,以用于识别一个额外的列(这是从PHP会话用户ID的输入)的时刻。 (我们正在讨论每个用户最多50-100个关键字)。

在数据请求我有一个额外的参数在MySQL查询(= X和“用户ID”)。

  1. 这是存储数据的安全(有在网站上没有敏感数据,但帐户必须是私人反正)的方式?

  2. 是否有更好的方式来处理呢? (我读过关于单独的数据库等),如果是这样,怎么样?

THX,

M.

+0

只要你使用转义的数据/ PDO等你应该不错。出于好奇,你的确切查询是什么?为什么不使用“从表user_id =”选择数据。 intval($ x)。 “”;? 编辑,你也可以散列USER_ID等也确保它不被篡改可言,但似乎有点矫枉过正海事组织 – Bono 2012-04-21 15:34:53

+0

Srry如果我不清楚,但正是这就是我现在做的东西的方式。 :-) – 2012-04-21 15:38:50

回答

2

这是存储数据的安全(有在网站上没有敏感数据,但 账户必须是私人反正)的方式?

让你的mysql查询中的user-id=x从表中获取数据没有任何错误。但要确保你没有直接从你的查询字符串中读取这个值,并追加到mysql查询中,而没有进行适当的清理和清理。 否则你将成为SQL injection的vicitm。

是否有更好的方式来处理呢? (我读了关于单独的数据库 等),如果是这样,如何?

我看不出有任何理由有单独的数据库来处理这个问题。你可以使用你当前的数据库。如果需要,您可以为此创建附加表格。我不确定你的数据库模式和实体关系是什么。所以我无法告诉你如何做到这一点。看看你的表格,并确保它是正常化的。

如果希望存储的数据只能被该特定用户看到,那么您可能需要检查当前登录的用户标识(从会话变量?获取)是否与db记录的userId相同。也许你可以与“CreatedById”字段值比较,如果你有一个。

我相信这个链接是一个必须阅读,如果“SQL注入”是给你的一个新名词。 http://www.unixwiz.net/techtips/sql-injection.html

+1

Thx的提示,我清理登录等,但我没有考虑这个洞呢。我没有阅读这篇文章,但看起来很多重要的信息显然都捆绑在那里,Thx – 2012-04-21 15:51:01

0

只需使用PHP $SESSION

通过使用session_set_save_handler您可以定义自己的会话存储方法,这可能是一个MySQL数据库的实例。

在会话中的值不能直接由用户改变(你可以用饼干)。所以这种方法非常安全,只要您不会在任何地方暴露cookie值。

0

没有办法是100%安全。你的方法听起来很不安全,但我看不到你的代码。如果你正在清理输入,以避免mysql注入,也没有办法让用户指定另一个用户的密钥,那么你可能会没事。