我的客户网站有一个“在线评估”部分,其中包含40个字段表单。每个字段都需要用户输入,我有程序允许50到200个字符,具体取决于问题。
然后将表单发送到客户端的邮件,但它也存储在数据库中,以便客户端可以稍后检查所有表单。
我正在使用codeigniter,我使用活动记录来阻止sql注入。我也用我在另一个问题中发现的方法对它进行了spambot验证。我必须隐藏字段,一个隐藏着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个字段,我不知道它是否是我的电脑,但我的互联网连接确实变慢了,几乎崩溃了。我担心攻击者可能会尝试多次填写此表单并完全填充每个字段,然后数据库崩溃了?这是真的吗?
将该表分为两个或三个不同的表是否更安全?还是没有意义?我不太了解安全性,我正在努力寻找可以学习的地方,但我找到的所有信息都充满了我不太懂的术语,所以这很难。我非常感谢你的帮助。
编辑:这样做的正确方法是什么?
答案 0 :(得分:6)
用于存储数据的数据库。
当然,每个系统都有局限性,但是对于一台机器和一个经典的关系数据库,所有项目中的绝大部分都没有性能问题。
分成多个表是没有意义的。
从性能的角度来看,只需确保您的索引适合您的查询。听起来文本字段对于您的模式来说是一个不错的选择,因为您不需要索引答案,并且它们的长度可能不同。
当然你可以使用验证码,但一般来说,如果你确实有垃圾邮件问题,我建议你只使用它。
你描述的蜜罐实践,至少目前是一个很好的实践。
无论你的连接速度有多慢,我都认为传输那些小文字不会填满它。
我希望能回答这个问题的所有明显部分。如果您需要更多信息,请更准确地描述您的确切问题并提供有关系统设置的更多信息。
答案 1 :(得分:1)
不要增加信息存储系统的复杂性以适应服务器。 KISS原则值得注意。数据库旨在存储信息,在某些Web应用程序中,存在绝对庞大的数据库。至于安全性,假设你已经明显下降,你应该没事。如果你真的想要,你可以将时间戳和IP地址添加到存储信息列表中(如果它们已经没有,出于安全和调试的原因,通常应该是这样),然后放入一个检查如何的函数最近由该IP地址输入了许多条目,如果他们超过某个阈值就锁定某人,当且仅当您确实遇到垃圾邮件问题时,您可以添加验证码,但这往往会降低用户满意度。考虑到一些应用程序上传图像,这些图像可以很容易地存储到数十亿字节,即数百万个字符,但是在这一点上,将它们存储在服务器的其他地方变得更加高效,将大量文本数据存储在一个数据库中表格应该不是问题。