Top 15 Free SQL Injection Scanners
J.R writes "The Security-Hacks blog has a summary of the 15 best free SQL Injection scanners, with links to download and a little information about each one. The list is intended asan aid for both web application developers and professional security auditors."
The list is intended asan aid for both web application developers and professional security auditors.
Ok, so that covers China and Japan, but what about Europe and the U.S.?
The theory of relativity doesn't work right in Arkansas.
I suppose the over-use of PHP (which for a long time didn't even support prepared statements (does it even do it today?)) combined with stupid users that created the current situation.
go on just say an aide for 1337 HAXOR's - you know you want to
Of course, security through obscurity is badbear.
:(
That said, there are times - and this is one of them - that I'm glad my recently most common database isn't fundamentally SQL, or anything well-recognized. It also helps that (I believe) mnesia is immune to injection, given that its queries are never textual, but rather always functional, and given that data are always presented as arguments. Every route to injection I'm aware of just doesn't make sense in context (though if someone knows a way attack Mnesia, I'd love to hear about it.)
Sure, there are times at which SQL is a major win over mnemosyne, but they're not common. Sure, it's nice to have a database be ready for you at any host, instead of having to take the time to find a good host who lets you run stuff. But when it comes down to it, the atypical performance characteristics of Erlang (especially since I write multiplayer games, for which massive concurrency is win) and the ridiculous speed of Mnesia make me miss SQL less every day.
'Course, client stuff still needs to work on MySQL.
StoneCypher is Full of BS
The feedback factor for SQL Injection is very low. It is very hard to generically detect the after-effects of a successful sql-injection attack.
In comparison, something like XSS is easy because if you inject a string, the string re-appears in the HTML returned (HTML injection). The XSRF and XSS attacks dominate the internet attacks because they are really easy to scan for - though technically that should be an excellent reason they shouldn't exist :)
Rasmus Lerdorf has this awesome test-tool for XSS he keeps demo'ing (thankfully not released). You can see the tool in action in the background. But there's still no real easy way to reliably scan for Sql injection.
Quidquid latine dictum sit, altum videtur
9.81m/s^2
i hear people talking about them from time to time, but i still can't figure out how they appear.
ain't there query parameters in practically all database access APIs?
In well written software SQL injection attacks shouldn't be possible. Don't use dynamic SQL, use stored procs. If you think you have to use dynamic sql, then create the sql statement within a stored proc (not code) then access that stored proc using authentication details that permit only read only access. I've never seen a situation in which dynamic SQL was required for updating or inserting data, generally it only gets used when performing complicated searching and even then it's not the only option....
http://www.sommarskog.se/dyn-search.html
blah'; UPDATE users SET uid = '1' WHERE uid = '668092';
For more information about SQL Injection
ich bin der musikant
mit taschenrechner in der hand
kraftwerk
What is this, Digg?
Validating input prevents alot of problems. Prepared queries help but can still be exploited in poorly written statements. As in the classic SELECT query example, "where id=23 OR 1=1", using a datatype test as well as testing for null values for a $_GET or $_POST parameter before executing the query would throw back an error if expecting an unsigned integer.
...was in conjunction with an error page which displayed the results of failed SQL.
... from catalog where section=1' into 'select ... from catalog where section=(select password from users where id=1)'.
I was able to change an innocuous 'select
This was nicely reported back to me as a SQL error stating that SQL was unable to convert "sdfsdfsdfsdf" into an integer, where "sdfsdfsdfsdf" was user id 1's password. I reported the problem to the site's owners, and it was still a month before they fixed it.
Moral of story - don't show the users any SQL errors, it gives them far too much information.
Once I was a four stone apology. Now I am two separate gorillas.
it's not just URLs and post-back forms that can be vulnerable, cookies can be too. i didnt realize that until i found one on my own site. (it wasnt exploited, i found it on my own.)
intresting read thank you and well put together
Webmaster SEO Forum
1. You can easily run both PHP4 and PHP5 on the same server. When it's done, it's usually determined by a .php5 extension or <?php5 ?> braces.
2. The upgrade from 4 to 5 CAN be quite painful if you've done a lot of OOP coding in PHP4. Nearly all of the upgrade was focused on increasing and improving OO support. Some of the changes made (like, for example, constructor naming) are backwards compatible, but most aren't.
3. This is all moot because you don't HAVE to use the Circa-php4 mysql extension, anyway. MySQLi (the Improved mysql extension) can be used with PHP4 just as well as it can be used with PHP5.
I don't need SQL injection scanners. I use perl DBI and I always put arguments in as '?'.
Religion is what happens when nature strikes and groupthink goes wrong.
What do you mean by 'too much information'? Security through obscurity?
Prepared SQL statements with positional arguments (SQL parameters) cannot solve all SQL injections cases. Sometimes, the program must build SQL text at run-time. For example, a search must add boolan terms to its WHERE clause based on user-input.
An effective way to protect a SELECT..WHERE query from SQL injections is to use INTEGER foreign keys. Don't expose the search form to text inputs, i.e. SQL injection. Instead, create another menu-table for each search term and use its primary key to index into the result-set.
Example:
Use these tables to search "restaurants" by "food type", e.g. "Italian".
menu table food_type (food_id integer, food_name char);
table restaturants (name char, food_id references food_type(food_id));
The HTML form has a SELECT menu of food_type with the OPTION VALUEs equal to the FOOD_ID keys. The user sees the FOOD_NAME. Users can't choose food-types that aren't in the DB, and won't have to guess until they find one!
This prevents SQL injection because the form input promises to be integer. We may build an IN() predicate of several FOOD_ID keys out of integers.
Also, note that the SELECT-list is *only* the columns we want to expose to the web.
SELECT name FROM restaurants
WHERE 1 = 1
-- added search term
AND IN(
-- list of FOOD_ID keys
1, 4, 8
)