是将数据提交到您的表应该剥夺任何应用程序这是一个很好的做法。当然,并非所有的应用程序都可以。
如果你不使用存储过程,我建议你创建的INSERT和更新数据库表中的触发器,并检查是否任何非法串试图进入,如果他们这样做,拒绝该行。 SQL有一些字符串操作关键字,如CHARINDEX,我个人会检查常见的字符,如“\”“;”,“$”,“&”等
我也想尝试并筛选出任何有已经进入你的表和删除的行:
DELETE FROM Table
WHERE Field LIKE '%<script>%'
另外,如果你使用一个存储过程,每个字段作为参数传递,然后这些字符不会进入你的数据库。
CREATE TRIGGER [dbo].[tr_CheckSQLInjection]
ON [dbo].[Notes]
FOR INSERT, UPDATE
AS
BEGIN
BEGIN TRANSACTION T_CHECKCHARACTERS
BEGIN TRY
-- YOUR LOGIC TO STRIP OUT THE CHARACTERS HERE
COMMIT TRANSACTION T_CHECKCHARACTERS
END TRY
BEGIN CATCH
RAISERROR('UNABLE TO COMMIT THE TRANSACTION', 1, 1)
ROLLBACK TRANSACTION T_CHECKCHARACTERS
END CATCH
END
达伦, 我认为它是一个伟大的想法在这方面bcoz我使用传统的ASP和asp.net没有存储过程在一起。不幸的是,我不熟悉这个触发器。你能把我连接到一个很好的例子吗? – 2012-03-29 08:03:55
触发器:http://www.sqlteam.com/article/an-introduction-to-triggers-part-i 我编辑我的帖子,包括一个例子太多。 – 2012-03-29 08:06:42
我也建议阅读SQL注入,就像其他人提到的一样。 – 2012-03-29 08:12:08