我为我的公司运行一个 PHP symfony-framework 网络应用程序,它对所有连接使用单一数据库登录,无论用户是管理员还是客户端。
我知道更高安全性的系统通常对不同级别的用户使用不同的登录名。
无论是否使用框架,这是我应该使用的安全功能吗?
应用程序是基于 Web 还是基于 Intranet 是否重要?
澄清一下:我是否应该关心为 symfony 创建一个插件来实现多个数据库登录,我是否应该为我创建的任何其他不基于框架的应用程序这样做?
如果您想知道,我正在使用 PHP5 和 MySQL。
您通常必须权衡这样做的成本与收益……但是风险管理中的收益很难量化。
基本上,它归结为漏洞利用的成本是多少,以及它发生的可能性是多少。
因此,由于有人设法删除了一个造成拒绝服务的表而不得不从备份中恢复,并且停机一天,就他们在给定时间内获得的利润而言,这对公司来说是有成本的,但是还有一个声誉损失的问题(即停止与您做生意的客户/用户,或将来不太可能做生意的潜在用户)......但我们必须通过有人成功攻击的可能性来平衡这一点站点并导致此。
如果你不存储信用卡,并且你不是一个大目标(人们会吹嘘要删除的网站类型),你就不太可能被黑客攻击......虽然,如果你运行的是公共分布式软件,你仍然有被脚本小子攻击的风险,他们只是在寻找运行具有已知漏洞的软件的人。
...
我们的安全人员似乎不理解的是,这是一种平衡行为——一些安全方面的变化会给您的用户带来负担。有时,安全本身会导致中断(例如,我们的一个外部合作伙伴移动了 IP 范围......但是防火墙中的新漏洞并没有出现,并且由于“网络保留”我们无法进行任何更改制作了一个多星期)或只是性能下降。
有时只是编码需要更长的时间,或者维护起来更让人头疼等等。
但这是您必须自己回答的问题——做出改变的代价是否值得?(有时,如果成本只是人力成本,是否存在机会成本;即,您是否可以一直在做其他可以从您的时间中获得更多收益的事情?)
在 ASP.NET/C# 中,我可以根据用户类选择一个不同的连接字符串(这意味着一些开销,但并不难做到)并在我的配置中保留两个连接字符串(或者甚至动态构建它基于其他因素)所以我认为同样的事情在 MySQL 中既合理又适当。
这对你有意义吗?