【问题标题】:is it safe to have a big table in database?在数据库中有一张大表是否安全?
【发布时间】:2013-06-16 22:08:19
【问题描述】:

我客户的网站有一个“在线评估”部分,由 40 个字段组成。每个字段都需要用户输入,我有程序根据问题允许输入 50 到 200 个字符。

然后表单被发送到客户的邮箱,但它也存储在数据库中,以便客户以后可以检查所有表单。

我正在使用 codeigniter,并且我使用了活动记录来防止 sql 注入。我还使用我在另一个问题中发现的方法对其进行了垃圾邮件验证。我要隐藏字段,一个用css隐藏。如果值已填写或不匹配,则表单不会验证。 (顺便说一句,这就够了,还是我还应该添加验证码?)。

代码是这样的:

<p class="mail"><input type="text" name="mail" id="mail" /></p> //then I hyde this with css
<input type="hidden" name="mail" value="some value" />

然后我验证它

if( $this->input->post('mail', true) != '' AND $this->input->post('mail', true) != 'some value') 
{
    die('could not send your request');
}
else
{
    process form
}

我的问题是,在创建数据库表时,因为我添加了 42 个字段,我不知道是不是我的电脑,但我的互联网连接速度确实变慢了,几乎崩溃了。我担心攻击者可能会尝试多次填写此表单并完全填写每个字段,然后数据库崩溃?这可能吗?

将该表分成两个或三个不同的表是否更安全?还是那毫无意义?我对安全性了解不多,我正在努力寻找可以学习的地方,但是我找到的所有信息都充满了我不太了解的术语,所以很难。非常感谢您的帮助。

编辑:正确的做法是什么?

【问题讨论】:

  • 我有一个数据库,其中有一个名为 logs 的表,我从未清除过它,它有大约几百万条记录。
  • DOS 攻击比填写表格要好得多。
  • 这不是问题。除非您使用 PHP 输入数据的方式。请记住将数据库查询移到循环之外,并且如果页面需要,每个请求只使用一个数据库连接。
  • 破解你自己的网站然后修复它
  • 当您深入研究黑客网站时,您会发现人们使用的术语、名称和方法,这将教授一些有关安全性的知识

标签: php mysql database security codeigniter


【解决方案1】:

数据库是用来存储数据的。

当然,每个系统都有局限性,但对于单机和经典关系数据库,大多数项目在性能方面都没有问题。

分成多个表没有意义。

从性能的角度来看,只需确保您的索引适合您的查询。听起来文本字段对于您的架构来说是一个不错的选择,因为您不需要为答案编制索引,而且它们的长度可能会有所不同。

当然,您可以使用验证码,但通常我建议您仅在确实遇到垃圾邮件问题时才使用它。

您描述的蜜罐实践至少目前是一个不错的实践。

此外,无论您的连接速度有多慢,我认为传输这么少的文本不会填满它。

我希望这能回答这个问题的所有明显部分。如果您需要更多信息,请更准确地描述您的确切问题,并提供有关您的系统设置的更多信息。

【讨论】:

  • “拆分成多个表没有意义。” --- 从性能的角度来看,这是有道理的。
  • 如果它太大了最好分开吗? @zerkms
  • @Gunr Jesra:对此没有灵丹妙药,但当您拥有 大量 数据时,分区/分片是一种非常常见的技术
  • 哦,我应该使用文本字段吗?我正在使用varchar。是的,你几乎回答了我所有的疑问,我很欣赏所花费的时间。谢谢:)
  • “我应该使用文本字段” --- 实际上,不。 mysql 处理textvarchar
【解决方案2】:

不要为了容纳服务器而增加信息存储系统的复杂性。 KISS 原则是需要充分了解的。数据库旨在存储信息,在某些 Web 应用程序中,数据库绝对是巨大的。就安全性而言,假设你已经明白了,你应该没问题。如果你真的想要,你可以将时间戳和 IP 地址添加到存储信息列表中(如果它们还没有出现,出于安全和调试原因,通常应该是这样),然后放入一个函数来检查如何该 IP 地址最近输入了许多条目,如果某人超过某个阈值,则将其锁定,并且当且仅当您确实遇到垃圾邮件问题时,您可以添加验证码,但这往往会降低用户满意度。考虑到某些应用程序将图像上传到数据库中,这些图像很容易达到数十兆字节,即数百万个字符,但此时将它们存储在服务器的其他位置会变得更有效率,将大量文本数据存储在一个单一的表应该不是问题。

【讨论】:

  • 所以当涉及到图像时,我应该将它们存储在服务器而不是数据库中。我将更多地研究时间戳和 IP 地址(首先我必须学习如何跟踪用户的 IP 地址并存储它,呵呵)然后实现你刚才说的逻辑。非常感谢!
  • @Ant100 ip !=user,如果你想跟踪用户,你需要一个正确的登录系统
  • @Dagon 我明白了。嗯……那环保主义者指的是什么?
  • 至于图像,是的,因为数据库存储在许多方面通常比直接存储在服务器上更昂贵,您应该将图像,索引,放在服务器上,然后将数据库中文件的路径。
  • 要获取用户的 IP 地址,您可能会发现 this link 很有帮助。
猜你喜欢
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
相关资源
最近更新 更多