2011-09-02 33 views
3

Web开发和接管某些代码的新手。他们有一个功能,以防止SQL注入,SQL Server数据库SQL Server注入

function safe(val, maxsize) 
    dim i, 
    terms = array(
     "cast", 
     "select", 
     "varchar", 
     "declare", 
     "drop", 
     ";", 
     "--", 
     "insert", 
     "delete", 
     "xp_" 
    ) 
    val = left(val,maxsize) 
    val = trim(val) 
    for i = 0 to ubound(terms) 
     val = replace(val, terms(i), "e_" & val & "_e", vbTextCompare) 
    next 
    val = replace(val, "'", "''") 
    makesafe = val 
end function 

犹豫要触摸这个,但这是否缺少什么?似乎他们偶尔砍死

+8

如果他们被黑客攻击,他们应该正确处理注入 - 使用带有正确数据类型的参数化语句,验证输入并且不要盲目地基于用户(甚至是应用程序)提交的字符串生成SQL语句。这个“安全”功能对我来说就像是一张虚假的安全毯。 –

+2

使用**参数化查询**而不是将您的SQL语句连接在一起是您**唯一可行的方法。忘记“消毒”你的输入 - 你会永远忘记一些东西 - 只是使用参数化查询并用它来完成...... –

+0

'exec'呢? – tugberk

回答

4

下面的文章应该有所帮助:

http://tugberkugurlu.com/archive/sql-injection-vs-lethal-injection-protection-against-sql-injection

这不是好主意,这条路走下来string.Replace

+0

绝对+1 - 唯一有用的解决方案是**参数化查询**,因为本文很好地显示 –

+1

@marc_s完全同意。此外,EntityFramework或Linq to SQL也会有所帮助。 – tugberk

+0

这看起来像传统ASP中的VBScript,所以它可能会涉及更多的移动到EF或Linq2SQL。 –

2

我就彻底放弃该功能,并开始使用参数像亚伦在他的评论中提到的陈述。如果您之前没有这样做,有关如何这样做的各种articles。在我链接到的文章中,请看步骤2.

2

我不会依赖这样的函数来防止sql注入攻击。参数化查询是必须的。几乎可以肯定一些注射文本,你会错过使用你列出的方法的方法。