我正在运行一个带有一些用户帐户的基本网站(没有cookie,php会话系统。)。 我想存储用户生成的一些数据,只能为自己显示。
目前我将来自所有用户的数据存储在一个表中,并带有一个用于标识的额外列(这是来自php session user-id的输入)。 (我们说的是每个用户最多50-100个密钥)。
在数据请求中,我在mysql查询中有一个额外的参数(AND“user-id”= x)。
这是安全的(网站上没有敏感数据,但帐户必须是私密的)存储数据的方式吗?
有没有更好的方法来解决这个问题? (我读过关于单独的数据库等),如果是,怎么做?
THX,
微米。
答案 0 :(得分:2)
这是否安全(网站上没有敏感数据,但是 帐户必须是私有的)存储数据的方式?
在mysql查询中使用user-id=x
从表中获取数据没有任何问题。但是请确保您没有直接从查询字符串中读取此值并附加到mysql查询而不进行适当的清理和清理。 否则您将成为SQL injection的受访者。
有更好的方法来处理这个问题吗? (我读到了关于单独的数据库 等等)如果是这样,怎么样?
我认为没有任何理由可以使用单独的数据库来处理这个问题。您可以使用当前的数据库。如果需要,您可以为此创建其他表。我不确定你的db模式和实体关系是什么。所以我无法告诉你如何做到这一点。查看表格并确保它已标准化。
如果您希望只有特定用户才能看到存储的数据,您可能想要检查当前登录的用户ID(从会话变量中获取?)是否与db记录的userId相同。可能是您可以与“CreatedById”字段值进行比较(如果您有)。
我认为如果“SQL注入”是一个新术语,必须阅读此链接。 http://www.unixwiz.net/techtips/sql-injection.html
答案 1 :(得分:0)
只需使用PHP $SESSION
。
通过使用session_set_save_handler
,您可以定义自己的会话存储方法,例如,可以是MySQL数据库。
用户不能直接更改会话中的值(就像使用cookie一样)。所以这种方法是完全安全的,只要你不在任何地方公开PHPSESSID
cookie值。
答案 2 :(得分:0)
不可能100%安全。你的方法听起来很不安全,但我看不到你的代码。如果您正确清理输入以避免mysql注入,并且用户无法指定其他用户的密钥,那么您可能没问题。