我正在创建一个网络应用程序,该应用程序从每个用户那里收集大量个人信息,这些信息可能会被黑客攻击。关于数据库安全我应该注意哪些约定和做法?例如,我是否应该为应用程序的每个用户创建一个单独的 MySQL 用户帐户,并使用唯一的用户名和密码,以防止用户检索他人的信息?
最佳答案
硬件级安全性
确保硬件位于安全设施中,最好是具有冗余电源、 Backbone 连接等的设施。我居住的城市有一个洞穴网络,那里有一个数据中心。该中心与城市电网有六个不同的连接,并连接到多个 Backbone 提供商——非常酷。
应用程序级安全性
您需要使用parameterized queries以避免 SQL 注入(inject)。如果您使用 PHP,我建议使用 PDO .
您还需要使用“白名单”——仅允许预定义的有效值列表中的值。例如,当允许某人输入名字时,您可以将有效字符限制为仅 [a-zA-Z](仅限大写和小写字母)。正则表达式在这里派上用场。
您需要设置与此类似的表来处理安全性:
actions
id unsigned int(P)
description varchar(50) // Delete users, edit account, etc.
roles
id unsigned int(P)
description varchar(50) // Billing admin, web developer, etc.
roles_actions
id unsigned int(P)
role_id unsigned int(F roles.id)
action_id unsigned int(F actions.id)
users
id unsigned int(P)
username varchar(32)
password varbinary(255)
…
users_roles
id unsigned int(P)
user_id unsigned int(F users.id)
role_id unsigned int(F roles.id)
这将允许与每个角色关联的无限数量的操作以及与每个用户关联的无限数量的角色。使得管理用户之间的权限变得相当容易。
如果您正在考虑存储信用卡信息,您需要首先进行大量研究。围绕此存在一些严重的问题。
出于安全原因,您可能希望记录对页面的每次“访问”(IP 地址、用户 ID – 如果是未登录的人,则为 NULL,等等)
您可能希望维护对数据库中每个表所做的每项更改的审计跟踪。触发器可以很方便地实现这一点。
数据库级安全性
您需要关注Principle of Least Privilege 。您还需要查看 Stored Procedures .
这只是我脑子里的一些事情。
关于MySQL - 数据库安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17116904/