【TechTarget中国原创】问:怎样在Oracle数据库中防御SQL注入攻击?
答:回答这个问题很简单,但是实施起来会花费应用设计师和DBA的大部分工作。
在过滤输入时整个应用程序都严格把关。除非有特殊情况,否则一些特殊字符就要坚决排除。有些如“—”、“/”和“;”通常被用来修正应用程序可能创建的SQL语句。一些输入文本里的数字也要过滤掉,防止十六进制值和MD5哈希值输入。最后,输入文本中的SQL集算子(SQL set operators),如UNION或INTERSECT。
另外,你可以通过使用绑定变量(bind variables)减小遭遇SQL注入攻击的可能性。如果我们对绑定变量赋值,而不是将输入用户与其他类进行连接,那么那些恶意SQL就不会被执行。除了要防御SQL注入以外,绑定变量在大多数情况下还是性能和可扩展性的关键。
最后,限定函数、程序和应用用户有权限制性的包。实施过程中本着最小权限原则的这一观念。还要限制访问包、不必要地访问应用用户的程序(UTL_FILE, UTL_SMPT, UTL_TCP等)能更进一步减小攻击的可能性或严重程度。