Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security SAAS启动数据库模式和安全注意事项_Security_Codeigniter_Saas - Fatal编程技术网

Security SAAS启动数据库模式和安全注意事项

Security SAAS启动数据库模式和安全注意事项,security,codeigniter,saas,Security,Codeigniter,Saas,我将首先投入到一个SAAS项目中,我已经组建了一个小团队来进行生产。在大多数情况下,我们已经计划好了所有功能,但我现在需要开始考虑数据库体系结构和安全问题 是否存在与普通web应用程序项目不同的安全问题,因为您可能有数百个用户 就数据库而言,我整天都在阅读关于数据库设计的帖子,我想我会用一个数据库来处理所有事情,但我想知道这是否会变得缓慢?假设您有一个包含30000条记录的“clients”表。这难道不会比为每个客户加载一个db慢很多吗 此外,注册和我的客户信息是否应该与实际的SAAS应用程序放

我将首先投入到一个SAAS项目中,我已经组建了一个小团队来进行生产。在大多数情况下,我们已经计划好了所有功能,但我现在需要开始考虑数据库体系结构和安全问题

是否存在与普通web应用程序项目不同的安全问题,因为您可能有数百个用户

就数据库而言,我整天都在阅读关于数据库设计的帖子,我想我会用一个数据库来处理所有事情,但我想知道这是否会变得缓慢?假设您有一个包含30000条记录的“clients”表。这难道不会比为每个客户加载一个db慢很多吗

此外,注册和我的客户信息是否应该与实际的SAAS应用程序放在同一个数据库中。换句话说,如果一个用户来到我的网站并注册免费试用,那么他应该进入一个数据库,而他的所有团队和客户等都进入实际的产品数据库,还是应该只进入一个数据库

在此之前还有其他考虑吗?我将在Codeigniter框架上构建它。

以下是一些想法:

安全性

你将从拥有更大用户群的潜在黑客那里得到更多的关注,但在大多数情况下,你的安全顾虑应该是一样的(只是有人发现并利用安全漏洞的几率和后果要高得多)

我不知道你们对Codeigniter了解多少,但它内置了许多安全特性。这里还有你想要的任何站点的一般安全功能

  • 正确使用CI的Active Record DB类以避免MySQL注入漏洞
  • 确保您正在对密码进行哈希和加密(每个用户的加密是好的,同时确保您的哈希算法是安全的-即,不是MD5)
  • 另外,还要确保任何其他机密都以某种方式进行了加密——Codeigniter为此提供了一个库,只要您的服务器上有mcrypt支持,这是相当不错的
  • 确保过滤用户输入以防止XSS(跨站点脚本)攻击。Codeigniter有一个尝试过滤掉这些内容的特性,但是它并没有很好地实现
  • 确保权限检查是无懈可击的,这样用户就无法访问不属于他们的信息
  • 每个ip限制每小时执行某种登录尝试
性能

我这里没有任何硬性的数字,但一定要确保所有适当的字段都被索引,因为行数越大,表扫描速度就越慢

避免过度规范化数据-有时最好将同一数据存储在多个位置。然后更新数据会导致性能下降,但在读取数据时可能会节省连接时间

如果有机会使用数据库触发器,那就试试吧——这比让web应用程序向数据库发送几个查询来完成同样的任务要快得多

如果您将免费试用帐户分离到另一个DB中,这将有助于将“真实客户数据”与试用数据分开(并且更容易说,只有perofrm对非试用数据进行自动备份)。从基础设施的角度来看,如果您希望将免费试用和常规服务转移到单独的系统上,这也会使您的工作变得更轻松

不过,不要有太多的数据库,记住每次推送更新时,都需要确保每个数据库模式都是最新的。如果您有数百个客户端数据库,对它们进行任何类型的非自动化管理都可能很容易变成一场噩梦。

以下是一些想法:

安全性

你将从拥有更大用户群的潜在黑客那里得到更多的关注,但在大多数情况下,你的安全顾虑应该是一样的(只是有人发现并利用安全漏洞的几率和后果要高得多)

我不知道你们对Codeigniter了解多少,但它内置了许多安全特性。这里还有你想要的任何站点的一般安全功能

  • 正确使用CI的Active Record DB类以避免MySQL注入漏洞
  • 确保您正在对密码进行哈希和加密(每个用户的加密是好的,同时确保您的哈希算法是安全的-即,不是MD5)
  • 另外,还要确保任何其他机密都以某种方式进行了加密——Codeigniter为此提供了一个库,只要您的服务器上有mcrypt支持,这是相当不错的
  • 确保过滤用户输入以防止XSS(跨站点脚本)攻击。Codeigniter有一个尝试过滤掉这些内容的特性,但是它并没有很好地实现
  • 确保权限检查是无懈可击的,这样用户就无法访问不属于他们的信息
  • 每个ip限制每小时执行某种登录尝试
性能

我这里没有任何硬性的数字,但一定要确保所有适当的字段都被索引,因为行数越大,表扫描速度就越慢

避免过度规范化数据-有时最好将同一数据存储在多个位置。然后更新数据会导致性能下降,但在读取数据时可能会节省连接时间

如果有机会使用数据库触发器,那就试试吧——这比让web应用程序向数据库发送几个查询来完成同样的任务要快得多

如果您将免费试用帐户分离到另一个DB中,我