我最近被一家活动策划公司聘用,负责开发一款网络应用程序,该应用程序允许在线支付特定活动费用并保存注册者名单。我的雇主要求我在开始编写应用程序代码之前提供一份项目规格/要求的文档,以确保我完全理解该项目背后的想法,从而在开发最终产品的过程中将出错风险降至最低。
这是我第一次与和其他在线支付处理器合作Paypal
,Caledon
我意识到我需要有一个非常安全数据库,因为关键信息必须保留在服务器中(即用于付款的信用卡的最后四位数字)。
我知道以下是很好的做法:
- 将数据库保存在独立的机器上(远离网络服务器)并仅在需要时访问它;
- 使用防火墙保护数据库的安全;
- 为根用户以及将访问数据库进行维护/管理的用户创建长且“难以猜测”的密码。
除此之外,我不知道我还能做什么来进一步保护数据库。将使用 Microsoft SQL 2005/2008 来构建数据库。
关于我该如何进行此事,有什么提示/建议吗?
先感谢您,
-克里斯托弗
答案1
在线信用卡处理的权威指南是支付卡行业 PCIDSS 标准:https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml 您列表中的所有内容(以及更多内容)都包含在该文档中。
要做好这件事需要做大量的工作,你确定没有已经编写的应用程序/服务可以满足客户的需求吗?
答案2
我会考虑:
强制加密连接到服务器 http://msdn.microsoft.com/en-us/library/ms191192.aspx
启用审计:http://msdn.microsoft.com/en-us/library/dd392015%28SQL.100%29.aspx
考虑禁用服务器的 SQL 登录并仅允许 Windows 身份验证
配置、保存和检查您的 Windows 和 SQL 服务器日志,包括审计登录/退出尝试。
确保您的数据库备份文件已加密,并跟踪它们的去向。
确保您的服务器已锁好。
答案3
首先要检查企业和服务器所在地的当地法律。我很惊讶地发现,在我所在的地方,我们不允许保留任何信用卡详细信息(在服务器上、打印件等),甚至不允许保留部分号码。
不仅 root 帐户,服务器上的所有帐户都需要合适的密码。root 帐户甚至不应该被远程访问。它只能在服务器上以“普通”用户身份登录并通过 sudo 或 su 发出命令来本地使用。我还喜欢让登录名和密码一样难以猜测的想法。不仅是那些用于访问数据的帐户,而且是任何可以远程登录的帐户,因为这有助于减缓暴力攻击。
我无法评论 MS SQL,因为我不使用它,但最重要的一点是要牢记,尤其是任何面向互联网的东西,是最小访问原则。换句话说,只授予任何用户或功能所需的绝对最小访问权限。