1

我客户的网站有一个“在线评估”部分,由 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 个字段,我不知道是不是我的电脑,但我的互联网连接速度真的变慢了,几乎崩溃了。我担心攻击者可能会尝试多次填写此表单并完全填写每个字段,然后数据库崩溃?这可能吗?

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

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

4

2 回答 2

6

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

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

分成多个表没有意义。

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

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

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

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

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

于 2013-06-16T22:15:29.963 回答
1

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

于 2013-06-16T23:11:41.700 回答