1

MS SQL 2008:我尝试搜索此内容,但并没有真正找到答案。我知道在保存到数据库之前应该对所有用户输入进行清理和验证,但我想知道对于数据库中受大小和类型限制的字段是否也需要这样做。

例如,我有几个 BIT 类型的字段,并且只允许 1 个字符,或者具有外键名称的 INT 字段,因此只能将外键保存到其中。

所以现在,在我让一个用户向另一个用户发送消息的表单上,我可以

  1. 单选按钮 BIT(联系我是/否)
  2. 隐藏字段(发送到#userid#),因此这会将用户的 ID 放入表中
  3. DateTime 字段(在此日期发送的消息)将由我自动填充,但我将其扔在这里,假设我让用户设置时间。
  4. VarChar(最大尺寸 2),我想知道这个,我猜即使仅限于 2,一个人也可以向其中注入恶意内容?

我需要在将这些字段发送到数据库之前对其进行清理,还是数据库会处理并拒绝输入?

我问所有这些的原因是为了找出普遍接受的内容以及出于性能原因。

谢谢。

4

2 回答 2

2

您需要清理您的输入,以防止恶意用户通过数据修改您的 SQL 查询来做坏事。我认为更改类型或大小不会有助于您系统的安全性。您的 DBMS 将拒绝任何数据大小或类型错误的插入。

于 2013-03-15T01:01:17.250 回答
1

数据类型不是安全的答案。数据类型应该适合您的业务需求。例如,如果您要求允许人们使用富文本段落,例如我现在正在做的(参见富文本),那么去掉 html 的 char(10) 字段可能是安全的,但没用。

您已经了解了一些关于 sql 注入的内容。您还必须注意恶意 html 和 javascript。只是为了好玩,插入这个:

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

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

您的问题已经得到解答。这只是要考虑的更多内容。

于 2013-03-15T02:16:05.853 回答