[Webappsec] Automatically detecting injections
Ray Foo
gunblad3 at gmail.com
Mon Apr 28 22:08:54 EDT 2008
Sorry for jumping/splitting the thread here. I'm confused (or uneducated in
this aspect for now ;) at Jim's statement below:
It's the combonation of the PreparedStatement AND binding of data from
untrusted sources.
What's the difference between a PreparedStatement with and without binding
of data? Even if we just used ps.setString() for all the parameters, the
strings (malicious or not) would be SQL-encoded anyway, isn't it not?
Regards,
Ray
On Mon, Apr 28, 2008 at 6:34 PM, Jim Manico <jim at manico.net> wrote:
> > yes, but there is no *way* you can make such a claim after performing
> only that sort of check.
>
> I thinkJeff is correct. It is impossible to perform a SQL Injection on a
> Java program of any kind if the programmer is using the PreparedStatement
> class AND binding all untrusted/user-driven variables to the query like so:
>
> PreparedStatement ps = conn.prepareStatement("UPDATE Messages SET description = ?, author = ? WHERE id = ? AND seq_num = ?");
> ps.setString(1,description);
> ps.setString(2,author);
> ps.setInt(3,id);
> ps.setInt(4,seqNum);
> ps.executeUpdate();
>
> This is a rather easy pattern to code review for.
>
> PraparedStatement alone will not secure your code from SQL Injection. It's
> the combonation of the PreparedStatement AND binding of data from untrusted
> sources. Queries created from String concatenation where variables come from
> untrusted sources are injectable.
>
> If you can find a way to inject the code sample above, you would be the
> first to do so and should publish a paper.
>
> - Jim
>
>
>
> On Mon, Apr 28, 2008 at 8:08 AM, Jeff Williams <jeff.williams at owasp.org> <jeff.williams at owasp.org> wrote:
>
>
> Valid concerns. That said, I would imagine a decent fuzzer will always
>
>
> > be faster than the best of source code auditors to identify whatever
> > types of bugs it is targetting. Obviously there are disadvantages and
>
> You imagine wrong.
>
> You can easily verify that an application with hundreds of thousands of
> lines of code doesn't have SQL injection in a matter of minutes. And you'd
> be accurate. You just check to make sure it only uses a parameterized
> database interface, like PreparedStatement.
>
>
> eh?
>
> no. that won't work. that will give you some information, yes, but
> there is no *way* you can make such a claim after performing only that
> sort of check.
>
>
>
>
> As you start thinking up attack variants and encodings, you'll see a
> combinatoric explosion in the fuzzer. Scans that used to take a few minutes
> for a short list will start taking hours or days. And they're wildly
> inaccurate.
>
> This is true of many classes of security holes, but not all of them. XSS is
> something that the tools have better luck with because it has to show up in
> the response and it's relatively simple. But they still have trouble with
> XSS that is stored in one place and retrieved in another, and complex XSS
> that requires special tricks or encoding.
>
> I recommend you choose the most cost-effective approach (speed, accuracy,
> coverage) for verifying each security area. For SQL injection, it's hard to
> beat looking at the code. In fact, it's pretty hard to beat code review for
> most problems. You'll hear lots of tool vendors claiming that code review is
> so expensive. Keep in mind that it's possible they have an agenda.
>
>
> --Jeff
>
> Jeff Williams, Chair
> The OWASP Foundation
> work: 410-707-1487
> main: 301-604-4882
>
> OWASP AppSec NYC 2008 is coming... are you ready?
>
>
>
>
> _______________________________________________
> Webappsec mailing list
> Webappsec at lists.owasp.org
> https://lists.owasp.org/mailman/listinfo/webappsec
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.owasp.org/pipermail/webappsec/attachments/20080429/35bcce39/attachment.html
More information about the Webappsec
mailing list