我有一个网站,用户名登录后会存储在会话变量中,我想知道从这个会话变量中存储的值查询是否安全?
答案 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数据。查询的所有数据都相同,应始终以相同的方式处理。
我知道这很难理解,但也非常重要,所以,至少尝试一下。