Few things make a CIO's eyes glaze over like the mere mention of SQL injections. Unless they cut their teeth in security or SQL programming, chances are that the folks who control the purse strings don't understand these increasingly common attacks. That's a real issue because you're probably making decisions that could exacerbate the problem.
So just how big is the problem? The number of SQL injection attempts has gone from a few thousand a day just last year to more than half a million a day now, according to IBM's ISS X-Force. The bad guys are using automated tools to find out where SQL injection is possible, evaluating the sites for the best exploitation possibilities. These bad guys are really bad. They aren't looking to be disruptive; they're looking to steal credit card numbers and identities for profit. These are the exploits that tripped up the likes of Heartland Payment Systems and retailer TJX. And even if you aren't processing lots of credit cards, there's reason to guard against SQL injection, as the exploit also can be used as a first step to modifying your Web site to spread malware.
And how might you be exacerbating the problem? Perhaps one of the most frustrating aspects of preventing SQL injections, is that there's no single security technology you can buy that will keep your apps safe. In particular, looking to the likes of Microsoft, Oracle, and IBM to produce a database impervious to injections is wrong headed. This is an exploit that depends on lax coding and poor application design practices. If you're operating like a lot of companies, chances are that you've outsourced both the coding and design of your applications. Chances are equally good that you didn't choose your developers based on their excellent practices in code security. So unless your team is carefully reviewing the code from your contracted developer, chances are unnervingly good that your application is susceptible to SQL injections.
Susceptibility is bad, but if your system and database admins are doing their jobs, then they've limited the overall access attainable from a compromised application or database. But that doesn't always happen. When apps are tested, they're often tested with root privilege--meaning the apps have the keys to the kingdom. That makes sense for testing, as the developers may not even be able to fully understand what the final security posture should look like for the application--and you may not want to tell them.
However, lots of apps work just fine when they have root access but not when they have more limited access. Figuring out why that is and fixing it can take time, and your resource-constrained IT staffers who are feeling pressure from line-of-business application owners may just run the app with root privilege even though they know they shouldn't. Once it's up and working, that's the sort of security lapse that could go unnoticed for months or years. No one sets out to create an insecure application, but it's all too easy to end up with one.