我使用sqlite和存储在文件系统上的会话编写了一个
PHP Web应用程序.
这在功能上很好,而且维护成本低.但是,现在它需要在共享主机上运行.
共享主机上的所有Web应用程序都作为同一用户运行,因此我的用户的会话数据容易受到攻击,数据库,代码等也是如此.
许多人建议在这种情况下在DBMS中存储会话,例如MysqL.所以起初我以为我会这样做,并将sqlite数据也移动到MysqL中.但后来我意识到网络应用程序用户需要读取MysqL凭据,所以我回到原点.
我认为最好的解决方案是使用PHP作为CGI,因此它作为每个Web应用程序的不同用户运行.这听起来不错,但我的主持人没有这样做它使用mod_PHP.启用此功能,管理员的观点是否有任何缺点? (性能,向后兼容性等)?如果没有,那么我会要求他们启用此功能.
否则,在这种情况下,我能做些什么来保护我的数据库和会话数据?
只要您的代码作为共享Web用户运行,存储在服务器上的任何内容都将容易受到攻击.任何其他用户都可以编写PHP脚本来检查服务器上的任何可读文件,包括您的数据和PHP代码.
原文链接:https://www.f2er.com/php/134238.html如果您的托管服务提供商允许它,在不同的用户下以PHP作为CGI运行会有所帮助,但我预计会有很大的性能损失,因为每个请求都需要创建一个新进程. (您可以将FCGI视为表现更佳的替代方案.)
另一种方法是根据用户提供的内容设置cookie,并使用它来加密会话数据.例如,当用户登录时,获取其用户名,密码(仅由他们提供)和当前时间的哈希,使用哈希加密会话数据,设置包含哈希的cookie.在下一个请求中,您将获得cookie,然后您可以使用它来解密会话数据.但请注意,这只会保护当前的会话数据;您的用户表,其他数据和代码仍然容易受到攻击.
在这种情况下,考虑到它提供的安全性降低,您需要决定是否可以接受共享主机的低成本权衡.这将取决于您的应用程序,而不是试图提出一种复杂的(可能甚至不是非常有效的)增加安全性的方法,您最好只接受风险.