2013-03-15 26 views
1

MS SQL 2008:我试图寻找这一点,但并没有真正找到答案。我知道所有的用户输入都应该在保存到数据库之前进行消毒和验证,但是我想知道这对于数据库中按大小和类型限制的字段是否也是必需的。是否限制数据库中的字段类型和大小足以满足安全性?

例如,我有几个字段是BIT类型,并且将只允许1个字符,或者int有一个外键指定字段,因此只有外键可以保存到它。

所以,现在,一种形式,我有一个用户发送消息给其他用户,我可以有

  1. 单选按钮BIT(联系本人是/否)
  2. 隐藏字段(发送至#用户名#)所以这将把用户的ID放入表
  3. DateTime字段(在这个日期发送的消息)将由我自动填充,但我把它扔在这里,让我们说我让用户设置时间。
  4. VARCHAR(最大尺寸2),这一次我想知道,我猜甚至只限于2,一个人可以注入一些恶意成吗?

我需要将它们发送到数据库之前,消毒这些字段,或将数据库句柄,并拒绝输入?

的原因,我问了这一切,是要找出被普遍接受,也为性能的原因。

谢谢。

+0

你列可能是一个'CHAR(1)',它不会发送'阻止我, DROP tbl' – Kermit 2013-03-15 01:04:09

+0

但它不会被插入表中,所以有什么意义? – Amir 2013-03-15 01:26:03

+0

由于表格将被丢弃......应用程序必须执行卫生。 – Kermit 2013-03-15 01:28:29

回答

2

您需要净化你的投入,以防止恶意用户通过该数据修改您的SQL查询做坏事。我不认为改变类型或大​​小会有助于系统的安全。您的DBMS将拒绝所有数据大小或类型不正确的插入。

+0

我不明白,你说我的DBMS会拒绝所有错误类型或大小的数据,那么为什么我需要在上面的示例中对输入进行清理?如果我的表中的字段是BIT类型,如何使用插入';把tbl'放进去? – Amir 2013-03-15 01:25:27

+0

,因为你可以做这样的事情:1'; DROP tbl; - 。这里“1”是位部分,我用'结束它,但是我继续告诉你的DBMS删除表(作为附加查询)。因此插入将会通过(该位列将具有值1),但是接下来的查询将删除整个表格。 – Oleksi 2013-03-15 01:28:04

+0

这种攻击不是要将某些东西插入到数据库中,而是应该让数据库管理系统执行一个你没有指定的查询。 – Oleksi 2013-03-15 01:29:05

1

数据类型都不能解决安全。数据类型应该适合您的业务需求。举例来说,如果你有一个要求,让人们丰富的文本段落,比如我现在在做什么,(见富文本),然后一个char(10)字段的HTML剥离出来可能是安全的,但无用。

你已经介绍了SQL注入了一下。您还必须注意恶意HTML和JavaScript。为了好玩,请插入:

<script>alert("oh dear");</script> 

到您的数据库中。然后写一个简单的.net/php/coldfusion /任何应用程序来选择它并将其显示在网页上。美元兑甜甜圈执行。

您的问题已被回答。这只是更多考虑的内容。

+0

谢谢,我会牢记这一点。 – Amir 2013-03-15 14:54:21

相关问题