Php 为什么不';我们有一个特定的数据库只用于身份验证,另一个用于其余的?

Php 为什么不';我们有一个特定的数据库只用于身份验证,另一个用于其余的?,php,sql,web,Php,Sql,Web,我想知道为什么只有一个数据库服务不更容易和更安全,只用于用户身份验证(保留用户名和密码),这将是很安全的(输入经过很好的消毒等) 以及为网站中的所有其他数据提供的另一个数据库服务,这些数据的安全性可能较低,可用于提供web内容 这难道不是一个很好的方法来防止这些天发生大量SQL注入吗?您似乎忽略了两点: 您的其余数据也应该是安全的(否则保护应用程序就没有意义了) 您不存储密码。从未。您只存储由密码、用户名(可选)和特定于记录的salt生成的哈希。因此,保护这个基础并不重要,它只是为了防止冒充

我想知道为什么只有一个数据库服务不更容易和更安全,只用于用户身份验证(保留用户名和密码),这将是很安全的(输入经过很好的消毒等)

以及为网站中的所有其他数据提供的另一个数据库服务,这些数据的安全性可能较低,可用于提供web内容


这难道不是一个很好的方法来防止这些天发生大量SQL注入吗?

您似乎忽略了两点:

  • 您的其余数据也应该是安全的(否则保护应用程序就没有意义了)
  • 您不存储密码。从未。您只存储由密码、用户名(可选)和特定于记录的salt生成的哈希。因此,保护这个基础并不重要,它只是为了防止冒充
由于没有理由以更大的方式保护数据库的这一部分,只需确保整个数据库都得到了正确的保护,因此管理一个数据库要比管理两个TB容易得多。试图在不同的关系型数据库中保存不同类型的数据并保持它们的一致性是一场噩梦


最后,请注意,这不应该改变任何有关mysql注入的内容。只是不允许使用预先准备好的语句进行注射。

这是一个棘手的问题。实际上,您可以有两个数据库,一个用于敏感数据,另一个用于“提供”

让我们这样说:即使你使用一个数据库只是为了“装修”,如果该数据库被黑客入侵会发生什么?您的用户是否必须在部分中看到“此网站被黑客攻击”或…?:)

编辑:什么是保护?保护是当你买了一杯咖啡,而你不想让你的朋友或其他人喝的时候。那如果你买咖啡和松饼呢。你会只保护一个吗?你会保护他们两个吗?哪一个对你更重要?如果你像我和大多数人一样,你会说两者都是。你的赞扬让我明白,松饼(使用者)比其他东西(家具)更重要

如果你不在乎咖啡,为什么你需要保护?可能是因为你对咖啡的重视程度不够,不足以保护它。那么让我说一下:你过去买咖啡的钱在它们还是钱的时候是值得的,但是现在它们是咖啡,除了形状,还有什么变化?没什么

现在,让我们回到我们的案例:如果你有一个简单的数据库,其中只包含“提供”文本,如“标题”、“描述”等。让它们丢失并不坏?你不需要去那里修理吗?你不需要工作才能把一切都弄得漂亮吗

更不用说,与数据库相关的大多数漏洞可能比只丢失一个数据库更糟糕。sql注入问题可能会破坏所有数据库,这是您试图避免的危险。因此,试图保护一个数据库而不是另一个数据库几乎是毫无意义的。相反,试着保护一切,你会确信无论你走到哪里,都不会发生任何事情。
所以你害怕一个特殊的囚犯,你保护了他很多,然后把那间旧牢房翻了个底朝天。你把目光移开,原来牢房里的犯人现在已经从牢房里出来了!更糟糕的是,他释放了那个特殊的囚犯(和其他所有人)。这就是sql注入所暗示的那种安全漏洞。

不。清除输入和保护密码是有区别的。SQL注入可以发生在任何查询中,它不仅允许有人窃取数据,还允许有人销毁数据。任何时候都应该防止这种情况

关于用户名和密码,还需要采取其他措施。首先,根本不存储密码,而是始终存储哈希版本,用盐哈希。此外,如果愿意,您可以将身份验证放在不同的数据库中,或者甚至放在某个身份验证服务中,但正如我所说,这是额外的


当然,如果从网站的角度来看,有大量数据是只读的,那么可以将其存储在不同的数据库中,或者至少使用没有任何修改数据权限的数据库用户连接网站。这样,数据就可以更好地防止破坏,因为网站上的错误、SQL注入甚至用户名和密码泄漏都不会导致数据破坏。但这也适用于作为“不太重要”数据的用户凭据。

我认为您需要深入研究RDBMS保护层,以更好地了解为什么它们在同一实例中更好

以MySQL数据库为例:

  • 一个实例由3个以上的数据库(mysql、information_schema和您创建的所有其他数据库)组成
  • 因此,您已经有了一个单独的数据库repo来处理auth+user+pass,这就是您的MySQL数据库
有一些方法可以开发无黑客攻击的应用程序-当使用MySQL时,大多数程序员使用开放式SQL代码(内联SQL)-这就是问题所在-黑客会利用这一点!要解决此问题,请使用存储过程(封装)


内部数据库权限也是一个问题——懒惰的开发人员或愚蠢的DBA将为应用程序用户提供额外的权限。从许多角度来看,你的想法是多余的。更多的实例将花费您更多的资金、更多的资源等。

如果数据不一定要安全,为什么要保护您的应用程序?您说这是一个noob问题,但这正是允许发生最严重违规的想法。公司会痴迷于监控和保护某个系统。与此同时,一些未打补丁、几乎被遗忘的网络可访问服务被忽视,直到观察敏锐的渗透者注入/升级/根除盒子,并从内部轻松访问“超级安全”数据库。如何安全地散列密码:@Darsstar谢谢,我想知道提供什么链接可以让OP对整个事情有一个很好的概述。是的,向用户提供了数据