将值存储在会话变量中并对值进行查询是否安全?

时间:2011-02-16 19:08:48

标签: php prepared-statement session-variables

我有一个网站,用户名登录后会存储在会话变量中,我想知道从这个会话变量中存储的值查询是否安全?

5 个答案:

答案 0 :(得分:6)

,会话存储在服务器端。

而不是保存用户名,您可以保存用户ID(int),以便占用更少的空间 服务器。请记住,您应该处理CSRF和会话劫持

答案 1 :(得分:3)

是的,是保存。但是,始终会转义进入查询的任何输入(最佳方式是绑定参数)。永远不要明确地信任任何变量,特别是如果你无法直接看到它的来源(意味着除非你可以向上滚动并查看$foo = 'bar';)。所以更好的方法是不要相信一切,最终你会更安全......

答案 2 :(得分:2)

会话通过将会话ID存储在发送到用户计算机的cookie中并将所有实际变量存储在服务器上来工作。因此,您主要担心的是用户将能够找到另一个用户的会话ID并伪装成他们;即session hijacking

考虑到这一点,你并不是真的担心这里的SQL注入,所以你应该对查询存储在会话中的变量进行查询。但是,您应该担心数据可以由预定收件人以外的人查看。如果你采取预防措施来防止劫持,那么你应该没事。

答案 3 :(得分:1)

取决于。

如果您网站中使用会话的网页受加密保护(HTTPS),那么可以减少因嗅探网络流量而导致会话劫持的风险(包含会话ID的Cookie受到保护。)

但是,如果您在共享主机上,会话文件通常存储在一个中心位置,并且信任未加密的会话数据确实会带来一些风险。

您可以加密会话数据,或者您可以开发自定义会话存储,如下面的链接所示: Trick-Out Your Session Handler

但是,无论您做什么或者您对会话数据的信任程度如何,都应该使用预准备语句或存储过程来保护SQL语句的完整性,从而防止SQL注入。

答案 4 :(得分:1)

事实上,只要您遵循语法和安全规则,在SQL查询中使用ANY变量是安全的。

数据源与此无关。无论是会话还是文件,还是RPC请求或POST数据。查询的所有数据都相同,应始终以相同的方式处理。

我知道这很难理解,但也非常重要,所以,至少尝试一下。