嗯,对于不安全的服务和应用程序可能产生的许多问题,这似乎是一个简单的解决方案。但是我不确定它是否可能,或者也许没有人想到这个想法......
而不是让程序员/开发人员确保他们的应用程序使用存储过程/参数化查询/转义字符串等来帮助防止sql注入/其他攻击 - 为什么不让构建数据库的人只是构建这些安全性数据库中的功能是什么,以便在对数据库执行更新或插入查询时,数据库在将字符串插入数据库之前对其进行保护/清理?
答案 0 :(得分:1)
数据库不一定知道正在发生的事情的背景。一个应用程序的恶意行为对另一个应用程序不具有恶意有时意图是
drop table users--
让数据库做最好的事情,安排数据要好得多。让开发人员担心安全实现。
答案 1 :(得分:1)
问题是数据库无法轻易判断请求执行的命令是否合法 - 它在语法上是有效的,并且可能有一个有效的原因要求用户请求执行它。
DBMS可以应用启发式方法。例如,如果单个请求同时结合了SELECT操作和DELETE操作,则可能会推断出这种情况比合法更可能是非法的 - 并且DBMS可能会拒绝该组合操作。但很难处理一个查询,其中WHERE条件已被削弱,以至于它显示的数据超出预期。 UNION查询可以故意从多个表中进行选择。仅仅表明存在弱势条件和强烈条件或者合并在一起 - 这可能是合法的。
总的来说,问题是DBMS应该能够执行大量的查询 - 所以基本上不可能确定它被执行的任何查询是合法的还是不合法的。
答案 2 :(得分:0)
访问数据库的正确方法是使用存储过程。如果您使用的是SQL Server和C#/ VB.NET,则可以使用LINQ to SQL,它允许您使用语言构建查询,然后将其转换为参数化SP。好东西。